PHP8中@sizeof抛出TypeError错误,如何修复并判断数组非空?
PHP8中数组非空判断的错误修复与正确写法
问题根源
PHP8对sizeof()(和它的别名count())的参数类型做了严格限制:必须传入数组或实现了Countable接口的对象,传入null会直接抛出TypeError致命错误,而且@错误抑制符无法屏蔽这种致命错误——这就是你原来的代码在PHP8报错的原因。而PHP7中count(null)会返回0,加上@能屏蔽警告,所以代码能正常运行。
错误修复与正确写法
下面是几种可靠的解决方案,按需选择:
1. 先判断变量类型,再检查长度
如果$mediaArray可能是null、数组或Countable对象,用is_countable()做前置判断:
if (is_countable($mediaArray) && count($mediaArray) > 0) { // Do something }
如果确定$mediaArray只会是数组或null,可以直接用is_array():
if (is_array($mediaArray) && sizeof($mediaArray) > 0) { // Do something }
2. 用空合并运算符将null转为空数组
这种写法更简洁,直接把null替换成空数组后再计数:
if (count($mediaArray ?? []) > 0) { // Do something }
3. 用!empty()快速判断(适合场景有限)
如果$mediaArray只会是数组或null,!empty()可以直接判断数组是否非空:
if (!empty($mediaArray)) { // Do something }
注意:
empty()会把空数组、0、''、null、false等都视为“空”,但如果你的场景只需要判断数组是否有元素(不管元素值是什么),这个写法完全没问题。
总结
优先推荐is_countable() + count()的组合,兼容性和通用性最好;如果追求简洁,$mediaArray ?? []的写法也很实用;!empty()适合确定变量类型的场景。
内容的提问来源于stack exchange,提问作者Nico van Wijk
相关产品推荐
相关产品推荐

