在 "IF" 中定义变量在 PHP 中不起作用

Define variable in "IF" does not work in PHP

...
elseif ($notes = json_decode($op->notes) && isset($notes->newSet)){
           // $notes = json_decode($op->notes);
            $set = \App\Set::find($notes->newSet);
            $setTitle = $set->title;
        }
...

上面的 elseif 语句产生了关于行 $set = \App\Set::find($notes->newSet)

的错误 Trying to get property of non-object

通过这个elseif块应该意味着在elseif中赋值了$notes并且找到了$notes->newSet的值。

我不知道为什么上面的代码片段不起作用!它只有在我取消注释 // $notes = json_decode($op->notes);

时才有效

PHP版本是7.0.18

正如@zerkms 所指出的,由于运算符的优先级,

之后的表达式部分
$notes = 

先评估,成功的情况下,

json_decode($op->notes) && isset($notes->newSet)

计算为 true,导致 $notes 被分配 true,而不是您想要的 json_decode()d 数据。

要解决这个问题,将赋值括在括号中,它会首先被评估,并且,正如@jh1711 所指出的,确保验证解码数据实际上是一个对象( [= 的实例17=]),而不是数组:

} elseif (($notes = json_decode($op->notes)) instanceof \stdClass && isset($notes->newSet)) {
    $set = \App\Set::find($notes->newSet);
    $setTitle = $set->title;
}

参考: