Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查数据是否存在时避免在PHP中出现通知_Php - Fatal编程技术网

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

检查数据是否存在时避免在PHP中出现通知,php,Php,我正在使用解码的JSON,我想检查字段是否存在 这就是我所拥有的: $data = json_decode($json); if(!$var = $data->{'var'}) return false; else return $var; 通过这段代码,我得到了注意:未定义的属性:stdClass::$var in…。它是有效的,我知道我可以通过处理错误报告来消除通知,但我不希望收到通知,所以我做了以下工作: $data = json_decode($json); if

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

这就是我所拥有的:

$data = json_decode($json);
if(!$var = $data->{'var'})
    return false;
else
    return $var;
通过这段代码,我得到了
注意:未定义的属性:stdClass::$var in…
。它是有效的,我知道我可以通过处理错误报告来消除通知,但我不希望收到通知,所以我做了以下工作:

$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;
}

但是我得到了一个语法错误(
语法错误,意外的“=”,预期的“,”或“)”
)。那么在PHP中有没有合适的方法来实现这一点呢?或者我应该忘记它,继续使用opt。#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

$data=json\u decode($json,true);如果(array_key_exists('var',$data)){…
使用@在php中隐藏通知@Carlos Navaroo
if(isset($data->var))
应该可以工作
只要忘记它并使用opt即可。#2
选项2是完成工作的一种完全合法且可读的方法。