必需参数 $xxx 跟在可选参数 $yyy 之后

Required parameter $xxx follows optional parameter $yyy

Deprecated: Required parameter $xxx follows optional parameter $yyy in...

自升级到 PHP 8.0 后,当 运行 代码如下时会抛出此错误:

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

这在 PHP 的过去版本中没有问题。

这种函数声明风格has been deprecated in PHP 8.0. Writing functions like this has never made sense, since all parameters (up to the last required one) would need to be specified when the function was called. It also caused confusion with use of the ReflectionFunctionAbstract class分析函数和方法。

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

应重写该函数以删除早期参数的默认值。由于在不声明所有参数的情况下永远无法调用该函数,因此这对其功能应该没有影响。

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

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

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

"如果带默认值的参数后跟必填参数,则默认值无效。"

自 PHP 8.0.0 起已弃用,通常可以解决

  1. 通过删除默认值
  2. 按照上面的建议改变参数的位置

,功能不变。

这个方法对我有效 =)

我遇到了以下错误:

ErrorException Required parameter $id follows optional parameter $getLink

以下代码生成此异常

public function fo($getLink = null , $id)
{ ......
}

为了解决这个错误,我按照以下代码中的建议更改了参数的位置:

 public function fo($id, getLink = null)
    { ......
    }

完成=)