【问题标题】:PHP short-circuit evaluationPHP短路评估
【发布时间】: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


【解决方案1】:

in_array 在数组中查找 。如果要查看,如果存在密钥,请改用array_key_exists

if (!array_key_exists('array_item', $body) || !is_int($body['array_item']))
    throw new Exception();

【讨论】:

    猜你喜欢
    • 2012-05-17
    • 2011-08-07
    • 1970-01-01
    • 2015-11-14
    • 2012-02-10
    • 2010-12-21
    • 1970-01-01
    相关资源
    最近更新 更多