PHP не оценивает выражение слева направо? - PullRequest
0 голосов
/ 25 августа 2018

У меня есть следующее выражение:

if (!empty($forums) && count($forums) == 1)

Исходя из порядка оценки, первое, что нужно проверить, это если $forums не пусто. Если оно пустое, то оно должно сразу принимать значение false, когда оно достигает значения &&. В этот момент он должен выйти из оператора if и даже не пытаться count().

Однако, эта ошибка была произведена:

ErrorException: [E_WARNING] count (): Параметр должен быть массивом или объектом, который реализует Счетное

Трассировка стека показывает, что он попытался сделать count(NULL). Если $forums оценивается как NULL; тогда почему выражение продолжается вместо выхода из оператора if?

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

Проверьте, действительно ли ваша переменная может рассчитывать на PHP.Судя по тому, что вы проверяете, является ли он пустым, он даже может быть объектом или чем-то другим, что PHP просто не может сосчитать.Вместо того, чтобы проверять empty(), я бы предложил вам:

if (is_array($forums) && count($forums) == 1) {
    // do stuff.
}

Если это массив, он не может быть пустым, поэтому вам даже не нужно проверять это в любом случае.

0 голосов
/ 25 августа 2018

Не уверен, является ли $ forms массивом.Вы должны использовать is_array, чтобы проверить, является ли он массивом.

https://codebrace.com/editor/b03bb92ab

<iframe width="100%" height="300" src="//codebrace.com/embed/b03bb92ab/?12px&amp;wordwrap&amp;php&amp;result&amp;xcode&amp;focus=php" allowtransparency="true" allowfullscreen="true" style="background-color:transparent; overflow: hidden;margin: 0;" title="" frameborder="0"></iframe>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...