php中0,空,null和false的区别【转】
2021-02-03 23:18
标签:article val false lan 字符串 种类型 存在 lang 链接 总结: 结论一:关于变量类型的理解 结论二: 原文链接:https://blog.csdn.net/ty_hf/article/details/70217267 php中0,空,null和false的区别【转】 标签:article val false lan 字符串 种类型 存在 lang 链接 原文地址:https://www.cnblogs.com/KillBugMe/p/13151766.html$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 "
empty测试
";
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 "
";
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 "(==)双等式测试
";
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 "(===)三等式测试
";
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 ; ‘0‘ ; ‘‘ ; false 】:这四个为存在,php底层是开辟zval空间存储,有value,有type
1、string ‘0‘与 string ‘‘ 不相等,(想一下就明白,同类型比较【1个长度】的字符串怎么可能 等于 【0个长度】 的字符串)
2、int 0 却和 string ‘‘ 空相等,(非同类形比较,php会做类型转换)
3、string ‘0‘ 与 null 不相等,int 0 与 null 相等