Deprecated: Required parameter $xxx follows optional parameter $yyy in...
升级到PHP 8.0后,运行像这样的代码会抛出此错误:
function test_function(int $var1 = 2, int $var2) {
return $var1 / $var2;
}
这在过去的PHP版本中已经可以正常工作。
Deprecated: Required parameter $xxx follows optional parameter $yyy in...
升级到PHP 8.0后,运行像这样的代码会抛出此错误:
function test_function(int $var1 = 2, int $var2) {
return $var1 / $var2;
}
这在过去的PHP版本中已经可以正常工作。
这种函数声明方式在PHP 8.0中已被弃用。像这样编写函数从来没有任何意义,因为在调用函数时需要指定所有参数(直到最后一个必需的参数)。它还导致混淆,使得使用ReflectionFunctionAbstract
类分析函数和方法变得困难。
新的废弃仅确保函数签名遵循常识假设:必须出现的必需参数应始终在可选参数之前声明。
应该重写该函数以删除较早参数上的默认值。由于永远不会在未声明所有参数的情况下调用函数,因此这对其功能没有影响。
function test_function(int $var1, int $var2) {
return $var1 / $var2;
}
func(param1: "value1", param2: "value2")
因此,该语法支持在任何顺序上指定任何参数的默认值。@miken32 - 你说“因为(直到最后一个必需参数)在函数被调用时必须指定所有参数”- 这已经不再正确了。 - Ray Pereafunction test_function(int $xxx, int $yyy = 2)
{
return $xxx * $yyy;
}
如果一个带有默认值的参数后面跟着一个必需参数,则默认值无效。
这在 PHP 8.0.0 中已被弃用,通常可以通过以下方法解决:
而不会影响功能。
这种方法在我的情况下有效 =)
我遇到了以下错误:
ErrorException Required parameter $id follows optional parameter $getLink
以下代码生成了此异常
public function fo($getLink = null , $id)
{ ......
}
public function fo($id, getLink = null)
{ ......
}
完成了 =)
如果有人试图找到需要更新的函数,您可以在Linux中使用此正则表达式通过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
*?
都是多余的。有些地方应该使用 +
。但是,实际上,IDE将是最好的工具。它可以捕获像grep无法捕获的多行签名等内容。 - miken32.*?
在ERE中与 .*
完全相同,b) 你的正则表达式允许使用类似于 \$[a-zA-Z0-9_]*
的空/无效参数。另外:{1}
量词是多余的,而大小写不敏感的搜索意味着不必检查 a-z 和 A-Z 两者。 - miken32对我有效的解决方案是交换参数的位置,确保没有任何一个参数在默认值设置为 null 的参数后面。
function test_function(int $var1 = 2, int $var2=0)
,因为无论在何处使用该函数,都会传递一个值给$var2
。然后在空闲时间内,搜索并更新您的代码。 - bluepinto