在 "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;
}
参考:
...
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;
}
参考: