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";
}
这就药丸。