You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 13:42:22