我正在处理一个解码的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.
选项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