php 可选参数$yyy后面跟着必需参数$xxx

2g32fytz  于 2023-03-16  发布在  PHP
关注(0)|答案(5)|浏览(158)
Deprecated: Required parameter $xxx follows optional parameter $yyy in...

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

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

这在过去的PHP版本中是可以正常工作的。

2admgd59

2admgd591#

这种风格的函数声明has been deprecated in PHP 8.0。编写这样的函数有never made sense,因为调用函数时需要指定所有参数(直到最后一个必需的参数)。使用来分析函数和方法也有caused confusion
新的弃用只是确保函数签名遵循常识性假设,即必须出现的必需参数应始终在可选参数之前声明。
应该重写该函数以删除早期参数的默认值。由于不声明所有参数就无法调用该函数,因此这应该不会影响其功能。

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

bvjxkvbb2#

不带默认值的必需参数应放在第一位。

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

iyfjxgzm3#

如果有人想找出需要更新的函数,可以在linux中通过grep使用这个正则表达式,grep会将结果输出到results.txt文件中,它只会在.php文件中搜索。
我花了一段时间才让它工作,它可能需要更多的调整!

flag -i = Case insensitive search
flag -n = print line number match was found on with the file found
flag -r = recursive from current location downwards
flag -E = Use extended regular expression rules

grep -irnE --include \*.php 'function ([a-zA-Z0-9_]*?)[ ]?\(.*?\$[a-zA-Z0-9_]*?=.*?(\$[a-zA-Z0-9_]*?)[\),]{1}[^\{]*?' > results.txt

希望这对任何试图查找和纠正错误的人有帮助。

vx6bjr1n

vx6bjr1n4#

“如果具有默认值的参数后跟必需参数,则默认值无效。"

从PHP 8.0.0开始不建议使用此问题,通常可以解决此问题
1.通过删除默认值
1.通过如上所述改变参数的位置
而不改变功能。
这个方法在我的情况下工作=)
我遇到了以下错误:
ErrorException必需参数$id跟在可选参数$getLink后面
以下代码正在生成此异常

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

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

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

完成=)

w46czmvw

w46czmvw5#

对我来说很有效的解决方案是交换参数的位置,确保没有参数出现在任何默认值设置为空的参数之后。

相关问题