最近好多朋友将自己的服务器从 PHP 7.4 升级到了 PHP 8.0 或者是 8.1 的,结果升级完成后挂出一堆的PHP错误提示。多数都是因为兼容性的问题造成的,其实要解决掉这些报错并不难,就是比较多麻烦,需要对照日志一条条改。所以这就是再要求我们在写代码的时候一定要规范化了。

很多错误其实在 PHP 7 中就已经存在了,只是没有报错而已,而 PHP 8 这次比较严格了,直接给你报个错,提醒你使用不严谨的问题。这里我们说一个升级PHP 8.0+后非常常见的报错--Deprecated报错。我这里以 WordPress 为例说明,这类型错误多是来自一些主题或者是插件。其实这类的错误早就存在好多年了,但是呢一直未受到太多重视,最终在PHP 8.0+的时候变成了Deprecated报错,直接给你甩出来下面这种错误。

PHP Deprecated 报错

PHP Deprecated
Deprecated: Required parameter $xxx follows optional parameter $yyy in…

错误代码示例说明

// PHP 7+
function xxxxx($avatar, $id_or_email, $size=30, $default, $alt){}

// PHP 8+
function xxxxx($avatar, $id_or_email, $size, $default, $alt){}

对比上面给出的对比代码,其实出现的问题很简单,错误的点就在 $size=30 这个参数。由于PHP 规定,在可选参数中,若有默认值的参数不在最后一个,将会直接忽视它的默认值。这个错误在PHP 7 中是隐性错误,但是这 PHP 8.0+ 中会抛出Deprecated错误提示,所以这样写根本没必要,解决方法是直接把默认值删除即可。