必需参数$xxx遵循可选参数$yyy

2022-08-30 17:08:54
Deprecated: Required parameter $xxx follows optional parameter $yyy in...

由于升级到 PHP 8.0,因此在运行如下代码时会引发此错误:

function test_function(int $var1 = 2, int $var2) {
    return $var1 / $var2;
}

这在PHP的过去版本中已经工作过,没有问题。


答案 1

这种函数声明样式在 PHP 8.0 中已被弃用。编写这样的函数从来就没有意义,因为在调用函数时需要指定所有参数(直到最后一个必需的参数)。它还导致使用ReflectionFunctionAbstract来分析函数和方法的混淆

新的弃用只是确保函数签名遵循常识性假设,即必须出现的必需参数应始终在可选参数之前声明。

应重写该函数以删除早期参数的默认值。由于如果不声明所有参数,则永远无法调用该函数,因此这应该不会影响其功能。

function test_function(int $var1, int $var2) {
    return $var1 / $var2;
}

答案 2

没有默认值的必需参数应放在第一位。

function test_function(int $xxx, int $yyy = 2)
{
    return $xxx * $yyy;
}
 

推荐