PHP 8.1中调用array_shift()传入Null报错,如何解决?
问题解决方法
原因分析
PHP 8.0及以上版本对内置函数的参数类型检查进行了严格升级,array_shift() 不再接受 null 作为参数,而PHP 7.2中允许传入null并返回null。当代码中$newvar未定义时,$end被赋值为null,进入while循环调用array_shift($end)就会触发TypeError致命错误。
修复方案
有两种简洁的修复方式,推荐第一种:
方案一:将
null替换为空数组
把初始化$end的代码改成:$end = isset($newvar) ? array($newvar) : [];当
$newvar不存在时,$end是空数组,array_shift([])会返回null,循环条件不成立,不会进入循环,和原代码逻辑完全一致,同时符合PHP 8.1的类型要求。方案二:在循环中增加类型判断
修改while循环的条件,先检查$end是否为数组:while (is_array($end) && ($ends = array_shift($end))) { // 原循环逻辑 }这种方式会先确保
array_shift()的参数是数组类型,避免报错。
内容的提问来源于stack exchange,提问作者Martin AJ
相关产品推荐
相关产品推荐

