php中0,null,empty,空,false,字符串关系详解

在一个项目中遇到了一个奇怪的问题,耗费了我不少时间都没有解决,最终调试发现是判断的问题—-关于0和 ‘ ‘ (空单引号,为好看清我加了个空格)的判断,我发现 0==” 居然成立,郁闷的同时决定写个简单页面测试,发誓要将0,null,empty,空,false的关系搞的一清二楚。因为这很可能在一些关键地方使我们编 写的程序,网站存在bug。特别是可能影响到登陆等特殊地方的安全性和逻辑正确性,虽然这是很基础的知识点,但很多人,包括一些高手都可能对 0,null,empty,空,false的关系很模糊。所以自己动手做一个测试还是很需要的。

这是关键的一个例子:

php"><?php
if('safdasefasefasf'==0){
 echo "该字符串转换为数字  等于 0 <br/>";
} //output:该字符串转换为数字 等于零。
?>

手册上有解释:该值由字符串最前面的部分决定。如果字符串以合法的数字数据开始,就用该数字作为其值,否则其值为 0(零)。  

也就是说 '3asfdf'==3 ; 'adsfasdf'==0 相当要注意。

 

再看详细的例子:

<?php
$a=0;
if($a==''){
 echo "0  等于  '' <br/>";
}    //output:0 等于''

if(trim($a)==''){
 echo "trim(0)等于'' <br/>";
}    //no output
  
if($a===''){
 echo "0==='' <br/>";
}    //no output

if(empty($a)){
 echo "'' is empty <br/>";
}   //output:'' is empty

if(is_null($a)){
 echo "0 is null <br/>";
}   //no output

if(is_numeric($a)){
 echo "0 is numeric <br/>";
}   //output:0 is numeric

if(is_string($a)){
 echo "0 is string <br/>";
}   //no output

if(strval($a)==''){
 echo "转换成字符串的0 is '' <br/>";
}   //no output

$b = '';
if($b==0){
 echo "''  等于  0 <br/>";
}    //output:''  等于  0

if(!''){
 echo "'' 就是false <br/>";
}    //output:'' 就是false

if(!0){
 echo "0 就是false <br/>";
}    //output:0 就是false


echo         0 == null;
//true
echo         0 === null;
//false
echo (string)0 != null;
//true
echo         0 != null;
//false
echo         0 !== null;
//true

?>

解释:0 也相当于 ” ,0  和 ” 都相当于空字符和false

在判断空(”)的时候一定要小心,0 也相当于 ” ,0  和 ” 都相当于空字符和false,判断为空最好用===;

php 0 null empty 字符串

分享到:
评论加载中,请稍后...
创APP如搭积木 - 创意无限,梦想即时!
回到顶部