php中0,空,null和false之間區別


$a =  0; 
$b="0"; 
$c= ''; 
$d= null; 
$e = false;

echo "5個變量-原始測試類型";
    var_dump($a);//int 0
    var_dump($b);//string '0'
    var_dump($c);//string ''
    var_dump($d);//null
    var_dump($e);//boolean false

echo "<h4>empty測試</h4>";
    var_dump(empty($a));//true
    var_dump(empty($b));//true
    var_dump(empty($c));//true
    var_dump(empty($d));//true
    var_dump(empty($e));//true

echo "<hr>"; var_dump(isset($a));//true var_dump(isset($b));//true var_dump(isset($c));//true var_dump(isset($d));//【false】 見結論一 var_dump(isset($e));//true

echo "<h4>(==)雙等式測試</h4>"; var_dump($a == $b);//true var_dump($a == $c);//true var_dump($a == $d);//true var_dump($a == $e);//true !! var_dump($b == $c);//【false】見結論二 var_dump($b == $d);//【false】見結論二 var_dump($b == $e);//true var_dump($c == $d);//true var_dump($c == $e);//true echo "<h4>(===)三等式測試</h4>"; var_dump($a === $b);//false var_dump($a === $c);//false var_dump($a === $d);//false var_dump($a === $e);//false var_dump($b === $c);//false var_dump($b === $d);//false var_dump($b === $e);//false
var_dump($c === $d);//false var_dump($c === $e);//false

總結:

對於 【0 ;'0' '' ;null false】五種類型

empty操作以上五個變量,都返回false

強等於(===)比較 都為false,同強語言結果(三個等號比較不但要比較值,而且要比較類型)

但對於(==)比較,需要注意string類型,涉及到底層結構與類型轉換

結論一:關於變量類型的理解

1.null為不存在之意:php底層的zval空間里(結構見下方)沒有存其value值,只存儲了一個type標志其 IS_NULL(所以解釋了 empty(null)=true,isset(null)=false ,isset('')=true)

2.【; '0' ; '' ; false 】:這四個為存在,php底層是開辟zval空間存儲,有value,有type

結論二:

1、string '0'與 string '' 不相等,(想一下就明白,同類型比較【1個長度】的字符串怎么可能 等於 【0個長度】 的字符串)

2、int 0 卻和 string '' 空相等,(非同類形比較,php會做類型轉換)

3、string '0' 與 null 不相等,int 0 與 null 相等


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM