先说明一下结论:0与NULL,False,“0”,“\0”的值相同,都以0存储,但是类型不同,
再看一段实验代码:
<?php
$test=0;
if($test==''){
echo '<br />在php中,0的值等同\'\''; //被输出
}
if($test===''){
echo '<br />在php中,0的类型与\'\'一致'; //不被输出
}
else echo'<br />在php中,0的类型与\'\'不一致'; //被输出
if($test==NULL){
echo '<br />在php中,0的值等同NULL'; //被输出
}
if($test===NULL){
echo '<br />在php中,0的类型与NULL一致'; //不被输出
}
else echo'<br />在php中,0的类型与NULL不一致'; //被输出
if($test==false){
echo '<br />在php中,0的值等同False'; //被输出
}
if($test===false){
echo '<br />在php中,0的类型与False一致'; //不被输出
}
else echo'<br />在php中,0的类型与False不一致'; //被输出
if($test=="0"){
echo '<br />在php中,0的值等同"0"'; //被输出
}
if($test==="0"){
echo '<br />在php中,0的类型与"0"一致'; //不被输出
}
else echo'<br />在php中,0的类型与"0"不一致';//被输出
if($test=='\0'){
echo '<br />在php中,0的值等同\'\\0\''; //被输出
}
if($test==='\0'){
echo '<br />在php中,0的类型与\'\\0\'一致'; //不被输出
}
else echo'<br />在php中,0的类型与\'\\0\'不一致';//被输出
?>
原因是在PHP中变量是以C语言的结构体来存储的,空字符串和NULL,false,以及"\0"都是以值为0存储的,其中这个结构体有个zend_uchar type;这样的成员变量,他是用来保存变量的类型的,而空字符串的类型是string,NULL的类型是NULL,false是boolean。
注意:
1.NULL是一种特殊类型,在以下两种情况下变量为NULL。
- $t=NULL;
- $t
2.'\0'是ASCII为0的字符,它的意思是字符串结束符。
故而虽然'\0'的值等于0,但是$t='\0',empty($t)的返回值为False;而对于上面比较的其他为0的值,empty函数都返回True。
参考: