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

自从升级到 PHP 8.0 后,在运行如下代码时会引发此错误:

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

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

4

3 回答 3

28

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

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

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

function test_function(int $var1, int $var2) {
    return $var1 / $var2;
}
于 2020-12-14T22:16:40.337 回答
2

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

function test_function(int $xxx, int $yyy = 2)
{
    return $xxx * $yyy;
}
 
于 2021-04-15T14:26:54.123 回答
-1

“如果一个带默认值的参数后面跟着一个必填参数,则默认值无效。”

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

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

, 功能不变。

这种方法在我的情况下有效=)

我面临以下错误:

ErrorException 必需参数 $id 跟随可选参数 $getLink

以下代码正在生成此异常

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

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

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

完成 =)

于 2022-02-20T12:49:52.153 回答