PHP7升级至PHP8.1.2后TCPDF及代码弃用错误解决方案咨询
PHP7升级到PHP8.1.2后的错误修复方案
一、函数参数顺序错误(可选参数在必需参数之前)
PHP8.0开始严格要求所有可选参数必须放在必需参数之后,不再允许可选参数前置的写法,否则会触发"可选参数被隐式视为必需参数"的弃用警告。针对你的三个错误,分别处理:
1. tcpdf_fonts.php 第2024行
找到对应的函数定义,假设原代码是:
function some_function($isunicode = true, $currentfont) { // ... }
修改为:
function some_function($currentfont, $isunicode = true) { // ... }
同时检查项目中所有调用这个函数的地方,确保参数传递顺序正确(先传$currentfont,再传$isunicode,如果只传一个参数,就是$currentfont,不影响原有逻辑)。
2. tcpdf_static.php 第1139行
同理,找到函数定义,把$tagvspaces(必需参数)移到$tidy_options(可选参数)前面,保留$tidy_options的默认值。比如原代码:
function another_function($tidy_options = [], $tagvspaces) { // ... }
修改为:
function another_function($tagvspaces, $tidy_options = []) { // ... }
检查调用处的参数顺序,确保匹配新的定义。
3. Modules.php 第929行
同样调整参数顺序,把必需参数$TheDate放在可选参数$prenom前面。假设原函数:
function module_function($prenom = '', $TheDate) { // ... }
修改为:
function module_function($TheDate, $prenom = '') { // ... }
确认所有调用该函数的地方参数顺序正确,避免传参错误。
二、number_format()传递null参数的问题
PHP8.1开始禁止将null传递给number_format()的第一个参数(要求是float类型),解决方法是在调用前先处理null值:
解决方式1:使用空合并运算符设置默认值
在调用number_format()时,直接给参数设置默认值:
// 假设原代码是 number_format($some_var); number_format($some_var ?? 0);
如果需要保留小数位数和千位分隔符,同样处理:
number_format($some_var ?? 0, 2, ',', '.');
解决方式2:提前检查变量
在代码开头先处理可能为null的变量:
$some_var = $some_var ?? 0; // 或者根据业务逻辑设置其他默认值 // 之后调用number_format number_format($some_var);
额外建议
针对TCPDF的问题,更稳妥的方式是升级TCPDF到支持PHP8的版本(当前最新版本已兼容PHP8+),避免手动修改库文件带来的后续维护问题。如果暂时无法升级,上述手动调整参数顺序的方法可以解决当前警告。
内容的提问来源于stack exchange,提问作者Je1111
相关产品推荐
相关产品推荐

