• PHP的陷阱


    PHP的陷阱

    写代码的时候有个疑惑,那就是数组下标不存在的时候就会挂掉Undefined Index XXXX,这是对的,但是有时候他就不报错,这又是矛盾的。

    请看下面的例子:

    $json_raw = "{"data":null}";
    $data = json_decode($json_raw,true);
    
    $image_hash = $data['data']['image_hash'];//<1>
    echo $image_hash . PHP_EOL; 
    
    $arr1 =  ['data' => null];
    echo $arr1['data']['index']; //<2>
    
    $arr2 = [];
    echo $arr2['data']['index']; //<3>
    

    假定json_raw是HTTP某上传图片的接口返回的字符串。
    那么可以明确告诉你,只有<3>会出现PHP Error致命错误。

    那又如何?
    再看下面的例子

    $data = self::extractData($retData);
    if($data['retcode'] == 0){
        echo "Pass"; //<4>
    }

    某HTTP请求返回

    {
      "code": 200,
      "data": {
          "retcode":0,
          "msg":"success",
          "success":true
      }
      "message":"success"
    }

    程序提取了数据,$retData里面的。那么确实是成功了。

    但是要是返回

    {
      "code": 200,
      "data": null
      "message":"system error"
    }

    <4> 依旧会输出Pass.

    是不是很奇怪?所以最好这么写

    $data = self::extractData($retData);
    if($data != null && $data['retcode'] == 0){
        echo "Pass"; //<4>
    }

    原因:下标不存在报警的前提是:
    1. 他是数组
    2. 他的某下标不存在

    null不是数组,条件1 不满足null['index'],他会返回0或者null之类的,而php会把 null 和 0 认为是一样的。导致意想不到的错误的发生。

    if(null == 0){
       echo "yes";
    }

    这就药丸。

  • 相关阅读:
    java环境基础步骤 svn
    java环境基础步骤 jdk tomcat eclipse
    @ModelAttribute 注解及 POJO入参过程
    cookie小记
    jquery指index
    Js文件中文乱码
    Redis基础(转)
    eclipse导出jar包的方法
    简单谈谈如何利用h5实现音频的播放
    yii2 GridView 下拉搜索实现案例教程
  • 原文地址:https://www.cnblogs.com/slankka/p/9158511.html
Copyright © 2020-2023  润新知