2016-09-13 32 views
0

我有这样的代码:PHP短路评价

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

现在由于短路我希望is_int不若array_item不存在$body执行。不过,我仍然从PHP投诉“未定义索引array_item”,我认为这是从$body['array_item']

有人可以向我解释为什么$body['array_item']执行,如果is_int不是?

+0

工作正常我的PHP 7.0.8安装。 '||'不发出警告。 –

+2

@ chris85:错。如果它是'&&',则两者都必须进行测试。这就是为什么它是允许短路的“||”。如果'或'的任何部分是真的,那么整个事情就是真实的,这意味着后面的术语可以被跳过。 –

+0

啊误读了。是的,这是有道理的。这里没有通知https://3v4l.org/hnHM8 – chris85

回答

4

in_array在数组中寻找。如果你想看,如果一个密钥存在,使用array_key_exists而不是

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

啊,就是这样!谢谢,愚蠢的错误。 – DaedalusAlpha