在检查数据是否存在时避免在PHP中发出通知

时间:2016-01-05 13:14:21

标签: php

我正在使用解码的JSON,我想检查字段是否存在。

这就是我所拥有的:

$data = json_decode($json);
if(!$var = $data->{'var'})
    return false;
else
    return $var;

使用此代码,我得到Notice: Undefined property: stdClass::$var in ...。它有效,而且我知道我可以通过处理error_reporting来删除Notices,但我不想得到那个通知,所以我做了以下内容:

$data = json_decode($json);
if(!isset($data->{'var'}))
    return false;
else {
    $var = $data->{'var'};
    return $var;
}

在这种情况下,我没有收到通知,但我必须首先检查是否isset,然后创建一个包含该数据的变量,这似乎并不好看。我试过了:

$data = json_decode($json);
if(!isset($var = $data->{'var'}))
    return false;
else {
    return $var;
}

然后我收到语法错误(syntax error, unexpected '=', expecting ',' or ')')。那么在PHP中有没有正确的方法呢?或者我应该忘记它并继续选择。#2?

1 个答案:

答案 0 :(得分:2)

选项2是您最好的建议,如果您只需要检查一个或两个变量,确实可能是处理它的最佳方法。

你可以用三元缩短一点:

$data = json_decode($json);
return isset($data->{'var'})? $data->{'var'} : false;

如果您需要进行多项检查,请写一个抽象:

function tryGetObjectProperty($obj, $prop, $default = false){
    return isset($obj->{$prop})? $obj->{$prop} : $default;
}

$data = json_decode($json);

$var1 = tryGetObjectProperty($data, 'var');
var2  = tryGetObjectProperty($data, 'var2');
//etc