【发布时间】:2017-01-21 07:10:09
【问题描述】:
我有这个代码:
if (!in_array('array_item', $body) || !is_int($body['array_item']))
throw new Exception();
现在由于短路,如果array_item 在$body 中不存在,我希望is_int 不会执行。但是我仍然收到来自 PHP 的关于“未定义索引 array_item”的投诉,我认为它来自 $body['array_item']。
有人可以向我解释为什么如果is_int 不执行$body['array_item'] 吗?
【问题讨论】:
-
在我的 php 7.0.8 安装上运行良好。
||不发出任何警告。 -
@chris85:错了。如果是
&&,则两者都必须进行测试。这就是为什么||允许短路。如果or的任何部分为真,则整个情况为真,这意味着可以跳过后面的术语。 -
啊误读了。是的,这是有道理的。这里没有通知3v4l.org/hnHM8
-
@Mark B 我在 php 5.5.8 上,所以我想我有点过时了,但仍然。
-
也许你可以为对方 in_array('array_item', $body) 做这样的事情? !is_int($body['array_item']) : false
标签: php operators short-circuiting