個人感覺,php中的關於判斷變數是否存在或者為空的語法設計是失敗的,分工不明確,界限不清楚,判斷起來很容易遺留漏洞,使用php開發5年多了,經常看到因為輸入引數問題導致的系統錯誤,即便是工作多年的phper,有人把這歸結為靈活,但是經驗越久越傾向於將函式設計的功能明確且單一,更傾向於確定性的東西,討厭這種看起來功能多但是模糊的設計,這不能歸結為php是弱型別語言,而是實現者的問題。
isset
檢測變數是否已設定並且非null
,
isset ( mixed $var
, mixed $...
=?): bool
<?php
functiontt(
)$a=null;$b
=0;$c
=;var_dump
(isset($a
));// false
var_dump
(isset($b
));// true
var_dump
(isset($c
));// true
var_dump
(isset($c
['name'])
);// false
var_dump
(isset($d
));// false
var_dump
(isset($a
,$b,$c
,$d))
;// false
// var_dump(isset("abc")); // 語法錯誤
// var_dump(isset(tt())); // 語法錯誤
// var_dump(isset(my_const)); // 語法錯誤
可安全的用於檢查物件的物件的變數
// instead of writing
isset
($abc)&&
isset
($abc
->
def)
&&isset
($abc
->
def-
>
ghi)
;// or in a shorter form
isset
($abc
,$abc
->
def,
$abc
->
def-
>
ghi)
;// you can just write
isset (
$abc
->
def-
>
ghi)
;
empty()
判斷乙個變數不存在,或為空。
empty ( mixed $var
): bool
<?php
functiontt(
)$a=null;$b
=0;$c
=;var_dump
(empty($a
));// true
var_dump
(empty($b
));// true
var_dump
(empty($c
));// true
var_dump
(empty($c
['name'])
);// true
var_dump
(empty($d
));// true
var_dump
(empty
("abc"))
;// false
var_dump
(empty(tt
()))
;// true
// var_dump(empty(my_const)); // 語法錯誤
!
判斷是否為空。也可以判斷是否存在,未定義的變數會報php notice
,也不會報語法錯誤,不會終止程式。
<?php
functiontt(
)$a=null;$b
=0;$c
=;var_dump(!
$a);// true
var_dump(!
$b);// true
var_dump(!
$c);// true
var_dump(!
$c['name'])
;// true php notice: undefined index: name
var_dump(!
$d);// true php notice: undefined index: name
var_dump(!
("abc"))
;// false
var_dump(!
tt())
;// true
// var_dump(!my_const); // 語法錯誤
?:
三目運算子的簡寫。
$c
['name']?
:10 等價於 !$c[
'name']?
10:$c[
'name'
]
所以說它的判斷依據依然是:判斷是否為空。也可以判斷是否存在,未定義的變數會報php notice
,也不會報語法錯誤,不會終止程式。
??
$a??
10 等價於 isset($a
)?$a:
1
歸納
判斷是否存在:isset, ??
判斷不存在,或為空:empty()
判斷是否為空,不建議用來判斷是否存在:!, ?:
php 學習筆記,奇葩的陣列和資源
陣列的每個資料稱為乙個元素,元素包括索引和值兩個部分 索引可以由數字或字串組成,元素的值可以是多種資料型別 arr1 array this is a example arr2 array 0 php 1 is the the str best arr3 0 tmpname 顯示了陣列的3種宣告方式,...
php7擴充套件安裝奇葩事
早上好冷,真不想接 啊。但是事情往往就朝你不希望的方向發展,裡說 php7安裝memcache模組有問題,按網上搜尋的好多種方法都不行 考慮到小朋友要去幹別的活,只好親自上陣。根據貼圖,他是卡在memcache編譯那一步.不要點這裡 php7的memcache擴充套件已經跟以前不一樣了,需要用其他分...
php7擴充套件安裝奇葩事
早上好冷,真不想接 啊。但是事情往往就朝你不希望的方向發展,裡說 php7安裝memcache模組有問題,按網上搜尋的好多種方法都不行 考慮到小朋友要去幹別的活,只好親自上陣。根據貼圖,他是卡在memcache編譯那一步.不要點這裡 php7的memcache擴充套件已經跟以前不一樣了,需要用其他分...