php 0和“0”的 判空测试

故事起因

php 是弱类型语言,在某些特殊的值进行空判断要特别的小心。下面我对php 0 和“0” 进行了多种判空测试。做这个测试的原因 主要是目前mysql数据表字段类型被我们的开发设计得比较随性,再加上撸码判空也继承了这种随性的作风。两方弱类型的缠绵,导致bug 出现得如此简单。

测试

测试代码地址
测试的版本 php5.6 、 7.1
先甩一波测试结果:

/**
 *@description   7.1 version
 * 测试结果:
    $a = 0 满足条件 if($a == "") 
    $a = 0 不满足条件 if($a === "") 
    $a = 0 满足条件 if($a == "0") 
    $a = 0 不满足条件 if($a === "0") 
    $a = 0 满足条件 if($a == null) 
    $a = 0 不满足条件 if($a === null) 
    $a = 0 不满足条件 if($a) 
    $a = 0 满足条件 if(empty($a)) 

    $a = "0" 不满足条件if($a == "") 
    $a = "0" 不满足条件 if($a === "") 
    $a = "0" 满足条件 if($a == 0) 
    $a = "0" 不满足条件 if($a === 0) 
    $a = "0" 不满足条件 if($a == null) 
    $a = "0" 不满足条件 if($a === null) 
    $a = "0" 不满足条件 if($a) 
    $a = "0" 满足条件 if(empty($a)) 
**/

/**
 * @description   5.6 version
 * 测试结果:
    $a = 0 满足条件 if($a == "") 
    $a = 0 不满足条件 if($a === "") 
    $a = 0 满足条件 if($a == "0") 
    $a = 0 不满足条件 if($a === "0") 
    $a = 0 满足条件 if($a == null) 
    $a = 0 不满足条件 if($a === null) 
    $a = 0 不满足条件 if($a) 
    $a = 0 满足条件 if(empty($a)) 

    $a = "0" 不满足条件if($a == "") 
    $a = "0" 不满足条件 if($a === "") 
    $a = "0" 满足条件 if($a == 0) 
    $a = "0" 不满足条件 if($a === 0) 
    $a = "0" 不满足条件 if($a == null) 
    $a = "0" 不满足条件 if($a === null) 
    $a = "0" 不满足条件 if($a) 
    $a = "0" 满足条件 if(empty($a)) 
 */

结论

  • 5.6 版本开始判空结果没有版本差异,后续5.4以下版本再补充验证
  • 从测试结果看出对于类型要求严格的 最好用 === 全等。
  • 0 和 “0” empty() 都满足条件 返回true
  • 0 在非全等情况下,也认为是null和’’ 在if( a = = n u l l ) 、 i f ( a == null) 、if( a==null)if(a == “”) 是成立的
  • 当变量有可能为0 或者“0” 但是含义又一样时 避免使用if($var)这种写法

更多测试内容欢迎关注 https://github.com/Sherlock-L/php-unit-test

你可能感兴趣的:(php)