PHP不从左到右评估表达式?

时间:2018-08-25 18:46:28

标签: php if-statement

我有以下表达式:

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

基于求值顺序,它应该检查的第一件事是$forums是否为空。如果为空,则在碰到&&时应立即将其评估为false。此时,它应该退出if语句,甚至不要尝试count()

但是,产生了此错误:

  

ErrorException:[E_WARNING] count():参数必须是实现Countable的数组或对象

堆栈跟踪表明它尝试执行count(NULL)。如果$forums的评估结果为NULL;那么为什么表达式继续而不是退出if语句呢?

2 个答案:

答案 0 :(得分:1)

检查您的变量是否确实是PHP可以计数的。根据您的判断,仅测试它是否为空,它甚至可以是对象或PHP无法计数的其他内容。建议您不要测试empty()

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

如果它是一个数组,则不能为空,因此您甚至都不需要检查它。

答案 1 :(得分:0)

不确定$ 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>