php中0,空,null和false的区别【简记】
程序员文章站
2022-04-18 13:20:58
总结: 对于 【0 ;'0' ;'' ;null; false】五种类型 empty操作以上五个变量,都返回false 强等于( )比较 都为false,同强语言结果(三个等号比较不但要比较值,而且要比较类型) 但对于(==)比较,需要注意string类型,涉及到底层结构与类型转换 结论一:关于变量 ......
1 $a = 0; 2 $b="0"; 3 $c= ''; 4 $d= null; 5 $e = false; 6 7 echo "5个变量-原始测试类型"; 8 var_dump($a);//int 0 9 var_dump($b);//string '0' 10 var_dump($c);//string '' 11 var_dump($d);//null 12 var_dump($e);//boolean false 13 14 echo "<h4>empty测试</h4>"; 15 var_dump(empty($a));//true 16 var_dump(empty($b));//true 17 var_dump(empty($c));//true 18 var_dump(empty($d));//true 19 var_dump(empty($e));//true 20 21 echo "<hr>"; 22 var_dump(isset($a));//true 23 var_dump(isset($b));//true 24 var_dump(isset($c));//true 25 var_dump(isset($d));//【false】 见结论一 26 var_dump(isset($e));//true 27 28 echo "<h4>(==)双等式测试</h4>"; 29 var_dump($a == $b);//true 30 var_dump($a == $c);//true 31 var_dump($a == $d);//true 32 var_dump($a == $e);//true !! 33 34 var_dump($b == $c);//【false】见结论二 35 var_dump($b == $d);//【false】见结论二 36 var_dump($b == $e);//true 37 38 var_dump($c == $d);//true 39 var_dump($c == $e);//true 40 41 echo "<h4>(===)三等式测试</h4>"; 42 var_dump($a === $b);//false 43 var_dump($a === $c);//false 44 var_dump($a === $d);//false 45 var_dump($a === $e);//false 46 47 var_dump($b === $c);//false 48 var_dump($b === $d);//false 49 var_dump($b === $e);//false 50 51 var_dump($c === $d);//false 52 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 ; '0' ; '' ; false 】:这四个为存在,php底层是开辟zval空间存储,有value,有type
结论二:
1、string '0'与 string '' 不相等,(想一下就明白,同类型比较【1个长度】的字符串怎么可能 等于 【0个长度】 的字符串)
2、int 0 却和 string '' 空相等,(非同类形比较,php会做类型转换)
3、string '0' 与 null 不相等,int 0 与 null 相等
文章转自: