PHP

2016-09-13 6 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