zoukankan      html  css  js  c++  java
  • php中0,null,empty,空,false,字符串关系详解

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

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

    也就是说 '3asfdf'==3 ; 'adsfasdf'==0 相当要注意
    $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
    //========= 判断 0 和 '' 以及 empty null false的关系 end =========//
    //========= 判断 '' 和 0 以及 empty null false的关系 start =========//
    $b = '';
    if($b==0){
     echo "''  等于  0 <br/>";
    } //output:''  等于  0
    if(!''){
     echo "'' 就是false <br/>";
    } //output:'' 就是false
    if(!0){
     echo "0 就是false <br/>";
    } //output:0 就是false
    //========= 判断 '' 和 0 以及 empty null false的关系 end =========//
    echo "在判断空('')的时候一定要小心,0 也相当于'' ,0  和 '' 都相当于空字符和false,判断为空最好用===";
    ?> 输出的结果是: 0 等于 ” ” is empty 0 is numeric ” 等于 0 ” 就是false 0 就是false 在判断空(”)的时候一定要小心,0 也相当于” ,0 和 ” 都相当于空字符和false,判断为空最好用=== 只能这样解释:0 也相当于 ” ,0  和 ” 都相当于空字符和false
    在判断空(”)的时候一定要小心,0 也相当于 ” ,0  和 ” 都相当于空字符和false,判断为空最好用===;
    echo         0 == null; echo '**<br/>' ;        //true
    echo 0 === null; echo '**<br/>' ; //false
    echo (string)0 != null; echo '**<br/>' ; //true
    echo 0 != null; echo '**<br/>' ; //false
    echo 0 !== null; echo '**<br/>' ; //true
  • 相关阅读:
    列举 spring 支持的事务管理类型?
    memcached 能够更有效地使用内存吗?
    Redis 集群方案什么情况下会导致整个集群不可用?
    详细描述一下 Elasticsearch 更新和删除文档的过程?
    Redis 常见性能问题和解决方案?
    如果有大量的 key 需要设置同一时间过期,一般需要注意什么?
    synchronized 和 ReentrantLock 的区别?
    Redis 支持的 Java 客户端都有哪些?官方推荐用哪个?
    memcached 最大的优势是什么?
    memcached 是原子的吗?
  • 原文地址:https://www.cnblogs.com/zcy_soft/p/2029318.html
Copyright © 2011-2022 走看看