1. 程式人生 > >php中null和false和0之間的區別

php中null和false和0之間的區別

php中很多還不懂php中0,"",null和false之間的區別,這些區別有時會影響到資料判斷的正確性和安全性,給程式的測試執行造成很多麻煩所以必須好好的看好了下面的例子

簡單來說就是 他們的==和===的區別:第一個是值相等就為true    第二個必須是值和型別都相等才是true

先看一個例子:

<?

$str1 = null;

$str2 = false;

echo $str1==$str2 ? ‘相等’ : ‘不相等’;

$str3 = "";

$str4 = 0;

echo $str3==$str4 ? ‘相等’ : ‘不相等’;

$str5 = 0;

$str6 = '0';

echo $str5===$str6 ? ‘相等’ : ‘不相等’;

$str7=0;

$str=false;

echo $str7==$str8 ? ‘相等’ : ‘不相等’;

?>
執行結果:

//相等,相等,不相等,相等。

原因是在PHP中變數是以C語言的結構體來儲存的,空字串和NULL,false都是以值為0儲存的,其中這個結構體有個zend_uchartype;這樣的成員變數,他是用來儲存變數的型別的,而空字串的型別是string,NULL的型別是NULL,false是boolean。

這一點可以用echo gettype('');和echogettype(NULL);來列印看看!而===運算子是不單比較值,還有比較型別的,所以第三個為false!

所以可以這樣說===是等於下面的函式

function eq($v1,$v2) {
if($v1 ==$v2&&gettype($v1) ==gettype($v2)) {
return 1;
} else {
return 0;
}
}

所以空字串(''),false,NULL和0是值相等而型別不一樣!

注意:

NULL是一種特殊的型別.
兩種情況下為NULL
1. $var = NULL;
2. $var;
3.""、0、"0"、NULL、FALSE、array()、var $var; 以及沒有任何屬性的物件都將被認為是空的,如果var 為空,則返回 TRUE。