我有以下表达式:
if (!empty($forums) && count($forums) == 1)
基于求值顺序,它应该检查的第一件事是$forums
是否为空。如果为空,则在碰到&&
时应立即将其评估为false。此时,它应该退出if语句,甚至不要尝试count()
。
但是,产生了此错误:
ErrorException:[E_WARNING] count():参数必须是实现Countable的数组或对象
堆栈跟踪表明它尝试执行count(NULL)
。如果$forums
的评估结果为NULL
;那么为什么表达式继续而不是退出if语句呢?
答案 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&wordwrap&php&result&xcode&focus=php" allowtransparency="true" allowfullscreen="true" style="background-color:transparent; overflow: hidden;margin: 0;" title="" frameborder="0"></iframe>