PHP 中0," ",null和false的區別

php中不少還不懂php中0," ",null和false之間的區別,這些區別有時會影響到數據判斷的正確性和安全性,給程序的測試運行形成不少麻煩。 先看一個例子:php

<!-- lang: php -->
<?
<!-- lang: php -->
$str1 = null;
<!-- lang: php -->
$str2 = false;
<!-- lang: php -->
echo $str1==$str2 ? ‘相等’ : ‘不相等’;
<!-- lang: php -->
$str3 = "";
<!-- lang: php -->
$str4 = 0;
<!-- lang: php -->
echo $str3==$str4 ? ‘相等’ : ‘不相等’;
<!-- lang: php -->
$str5 = 0;
<!-- lang: php -->
$str6 = '0';
<!-- lang: php -->
echo $str5===$str6 ? ‘相等’ : ‘不相等’;
<!-- lang: php -->
$str7=0;
<!-- lang: php -->
$str8=false;
<!-- lang: php -->
echo $str7==$str8 ? ‘相等’ : ‘不相等’;
<!-- lang: php -->
?>

運行結果: //相等,相等,不相等,相等。安全

緣由是在PHP中變量是以C語言的結構體來存儲的,空字符串和NULL,false都是以值爲0存儲的,其中這個結構體有個zend_uchar type;這樣的成員變量,他是用來保存變量的類型的,而空字符串的類型是string,NULL的類型是NULL,false是boolean。 這一點能夠用echo gettype('');和echo gettype(NULL);來打印看看!而**===運算符是不單比較值,還有比較類型的**,因此第三個爲false!函數

因此能夠這樣說===是等於下面的函數:測試

<!-- lang: php -->
function eq($v1, $v2) {
<!-- lang: php -->
if($v1 == $v2 && gettype($v1) == gettype($v2)) {
<!-- lang: php -->
return 1;
<!-- lang: php -->
} else {
<!-- lang: php -->
return 0;
<!-- lang: php -->
}
<!-- lang: php -->
}

因此空字符串(''),false,NULL和0是值相等而類型不同! 注意: **NULL是一種特殊的類型. 兩種狀況下爲NULLcode

  1. $var = NULL;
  2. $var;** 3**.""、0、"0"、NULL、FALSE、array()、var $var; 以及沒有任何屬性的對象都將被認爲是空的,若是 var 爲空,則返回 TRUE**。
相關文章
相關標籤/搜索