必需参数 $xxx 跟在可选参数 $yyy 之后
Posted
技术标签:
【中文标题】必需参数 $xxx 跟在可选参数 $yyy 之后【英文标题】:Required parameter $xxx follows optional parameter $yyy 【发布时间】:2021-03-25 13:55:31 【问题描述】:Deprecated: Required parameter $xxx follows optional parameter $yyy in...
自从升级到 php 8.0 后,运行如下代码时会抛出此错误:
function test_function(int $var1 = 2, int $var2)
return $var1 / $var2;
这在过去的 PHP 版本中可以正常工作。
【问题讨论】:
改变参数的顺序,将$xxx放在可选参数$yyy之前。 这个问题已经有了答案。按照你的建议去做意味着在你的代码库中重写你的函数的每次使用。 【参考方案1】:这种风格的函数声明has been deprecated in PHP 8.0。像这样编写函数有never made sense,因为在调用函数时需要指定所有参数(直到最后一个必需的参数)。它还caused confusion与ReflectionFunctionAbstract
class一起使用来分析函数和方法。
新的弃用只是确保函数签名遵循常识假设,即必须出现的必需参数应始终在可选参数之前声明。
应该重写该函数以删除早期参数的默认值。由于在不声明所有参数的情况下永远无法调用该函数,因此这应该不会影响其功能。
function test_function(int $var1, int $var2)
return $var1 / $var2;
【讨论】:
"因为调用函数时需要指定所有参数(直到最后一个必需的参数)"。我不同意3v4l.org/Nb6i6 ;) 非常令人印象深刻的吹毛求疵! ?? “编写这样的函数从来没有意义” - 我不同意。出于理智或可读性的原因,在某些情况下,参数的排序可能会有所不同。这种弃用似乎是不必要且令人讨厌的更改。 @Enverex 在这种情况下指定的默认值永远不会被使用,所以它没有任何用处。我从事 PHP 专业编程已经超过 15 年,而且我从来不需要这样做。参数顺序和默认值不打算用作文档,这就是 PHPDoc 的用途。 @Rain - 我也不同意。我的 2 美分... PHP8 的弃用根本没有经过深思熟虑。在 PHP8 中,他们添加了命名参数,这意味着您现在可以按任何顺序调用参数,只要您像这样按名称调用它们:func(param1: "value1", param2: "value2")
因此,该语法补充了能够以任何顺序为任何参数指定默认值。 @miken32 - 你说“因为在调用函数时需要指定所有参数(直到最后一个必需的参数)” - 这不再是真的【参考方案2】:
没有默认值的必需参数应该放在第一位。
function test_function(int $xxx, int $yyy = 2)
return $xxx * $yyy;
【讨论】:
然后在整个代码中更新该方法的每次使用? 我认为您不必这样做,除非它会引发错误。 无默认值的必填参数应在前以上是关于必需参数 $xxx 跟在可选参数 $yyy 之后的主要内容,如果未能解决你的问题,请参考以下文章
必需参数 $path 遵循可选参数 $handlers paypal sdk [重复]