此代码是websocket服务器的一部分:
$msgArray = json_decode($msg);
if ($msgArray->sciID) {
echo "Has sciID";
}
它将接收像{"sciID":67812343}
这样的json字符串或者没有sciID的完全不同的json字符串,例如{"something":"else"}
。
当服务器收到后者时,它会回显:Notice: Undefined property: stdClass::$sciID in /path/to/file.php on line 10
检查$msgArray->sciID
是否存在的正确代码是什么?
答案 0 :(得分:54)
使用isset
作为通用检查(您也可以使用property_exists
,因为您正在处理对象):
if (isset($msgArray->sciID)) {
echo "Has sciID";
}
答案 1 :(得分:7)
答案 2 :(得分:4)
如果isset()
或property_exists()
不起作用,我们可以使用array_key_exists()
if (array_key_exists("key", $array)) {
echo "Has key";
}
答案 3 :(得分:0)
我一直都在isset()
,但我最近更改为!empty()
和empty
,因为我的一位朋友提出了建议。
答案 4 :(得分:0)
isset()
函数检查变量是否设置为且不为空,这是非常愚蠢的,给定其名称。如果您只想知道是否设置了变量,请使用以下函数:
function is_set( & $variable ) {
if ( isset( $variable ) and ! is_null( $variable ) )
return true;
else
return false;
}
此函数将在未设置变量时返回true,否则返回false。 '&'在参数旁边很重要,因为它告诉PHP将引用传递给变量,而不是变量的值,从而避免了“通知: 未定义变量“未设置变量时。