纠正PHP代码以检查变量是否存在

时间:2011-05-01 23:11:24

标签: php json websocket

此代码是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是否存在的正确代码是什么?

5 个答案:

答案 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将引用传递给变量,而不是变量的,从而避免了“通知: 未定义变量“未设置变量时。