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

JJJ*_*jim 21 php json websocket

此代码是websocket服务器的一部分:

$msgArray = json_decode($msg);
if ($msgArray->sciID) {
  echo "Has sciID";
}
Run Code Online (Sandbox Code Playgroud)

它将接收一个json字符串{"sciID":67812343}或一个完全不同的json字符串,没有sciID,如{"something":"else"}.

当服务器收到后来的时候,它会回复: Notice: Undefined property: stdClass::$sciID in /path/to/file.php on line 10

检查是否$msgArray->sciID存在的正确代码是什么?

Ros*_*oss 56

使用isset作为通用支票(你也可以使用property_exists,因为你正在处理的对象):

if (isset($msgArray->sciID)) {
    echo "Has sciID";
}
Run Code Online (Sandbox Code Playgroud)

  • 注意:对于`isset()`和`empty()`,一个不存在的变量和一个设置为NULL的变量被视为相同.只有`property_exists`和`ReflectionObject`才能说明不同之处. (2认同)

Pet*_*tak 5

万一isset()property_exists()不起作用,我们可以使用array_key_exists()

if (array_key_exists("key", $array)) {
    echo "Has key";
}
Run Code Online (Sandbox Code Playgroud)

  • 必须通过将第二个参数设置为 true 来将 JSON 字符串解码为数组,例如 `json_decode($str, true)` 以使用 array_key_exists (2认同)