php8.0网站页面出错:
Deprecated: explode(): Passing null to parameter #2 ($string) of type string is deprecated in /www/tbdr.cn/template/common/top.php on line 29
top.php源代码第29行如下:
<?php $bannerIdsArr = explode(",", $this->options->bannerIds);?>
这个报错是 PHP 8.0+ 严格类型检查 导致的,核心原因:
后台banner设置项未填任何字符串造成 $this->options->bannerIds 这个值是 null,但 explode() 函数第二个参数要求必须是字符串,PHP 8.0 不再允许直接给字符串参数传 null,所以抛出了废弃警告。
把第 29 行代码替换成下面任意一种即可:
#推荐写法(最安全):
<?php $bannerIdsArr = explode(",", (string)$this->options->bannerIds);?>
#兼容空值写法:
<?php $bannerIdsArr = explode(",", $this->options->bannerIds ?? '');?>
代码解释
(string):强制把 null 转为空字符串 "",满足 explode 字符串参数要求
?? '':PHP 7+ 新语法,值为 null 时自动使用空字符串替代
两种写法效果完全一致,都能消除报错,不影响原有功能
为什么会出现这个报错?
PHP 7.x 及以下:null 传给字符串参数会自动转为空字符串,不报错
PHP 8.0+:废弃这种自动转换,强制要求参数类型匹配
本质原因:后台没有设置 bannerIds 这个配置项,所以它的值是 null
这是 PHP 8.0 最常见的废弃警告之一,修复方式通用。
