是否可以在 PHP 中使用命名函数参数?
2022-08-30 12:56:43
有没有可能在 like in 有命名的函数参数?一个示例用例是:php
python
function foo($username = "", $password = "", $timeout = 10) {
}
我想覆盖 :$timeout
foo("", "", 3);
丑。我宁愿这样做:
foo(timeout=3);
有没有可能在 like in 有命名的函数参数?一个示例用例是:php
python
function foo($username = "", $password = "", $timeout = 10) {
}
我想覆盖 :$timeout
foo("", "", 3);
丑。我宁愿这样做:
foo(timeout=3);
PHP 8.0 在接受 RFC 的情况下增加了对命名参数的支持。
命名参数的传递方法是在值前面加上参数名称,后跟冒号。允许使用保留关键字作为参数名称。参数名称必须是标识符,不允许动态指定。
例如,仅传递示例中的第 3 个可选参数:
foo(timeout: 3);
在 PHP 8 之前,命名参数在 PHP 中是不可能的。从技术上讲,当您调用它时,首先计算,并将结果作为第一个参数传递给 。PHP 强制执行参数顺序,因此可比较的调用需要是 。您还有其他两个选择:foo($timeout=3)
$timeout=3
3
foo()
foo("", "", $timeout=3)
func_get_args()
请求 PHP 提供参数,或使用 PHP 5.6+ 中的可变长度参数功能。根据参数的数量,您可以决定如何处理每个参数。很多JQuery函数都做这样的事情。这很容易,但对于那些调用函数的人来说可能会令人困惑,因为它也不是自我记录的。你的论点仍然没有被命名。...
老问题,但这里有一些更多信息。
如其他答案所述,PHP 不直接支持命名参数。VBA是另一种具有这种奢侈的语言。
在 PHP 中,您可以使用相当合理的替代方法。PHP的数组处理特别好,你可以使用关联数组来传递参数数组,如下所示:
function foo($parms=[]) {
$username = $parms['username'] ?? '…';
$password = $parms['password'] ?? '…';
$timeout = $parms['timeout'] ?? '…';
}
foo(['timeout'=>10]);
请注意,如果输入数组元素不存在,则使用运算符来允许简单的默认值。在 PHP 7 之前,你会使用略有不同的,但在这种情况下给出相同的结果。感谢@LeeGee拿起这个。??
?:
不那么光滑,但命名参数还有另一个重要作用:它们允许您使用大量选项,而无需过长的有序参数列表。
编写函数的另一种方法是使用'extract函数:
function foo($parms=[]) {
$username = '…';
$password = '…';
$timeout = '…';
extract($parms,EXTR_IF_EXISTS);
}
此处,该函数将值复制到变量中,但前提是已定义它们。这可以防止导入您不知道的变量。extract