Jus*_*tin 15 php named-parameters
是否有可能在php像python有一个名为函数参数?一个示例用例是:
function foo($username = "", $password = "", $timeout = 10) {
}
Run Code Online (Sandbox Code Playgroud)
我想覆盖$timeout:
foo("", "", 3);
Run Code Online (Sandbox Code Playgroud)
丑陋.我宁愿这样做:
foo(timeout=3);
Run Code Online (Sandbox Code Playgroud)
Mat*_*t S 12
不,在PHP中无法使用命名参数。从技术上讲,当您调用foo($timeout=3) 它时,它首先求值$timeout=3,结果是3并将其作为第一个参数传递给foo()。而且PHP会强制执行参数顺序,因此可比调用必须为foo("", "", $timeout=3)。您还有两个选择:
func_get_args()或使用PHP 5.6+中的... 可变长度参数功能向PHP询问参数。根据参数的数量,您可以决定如何对待每个参数。许多JQuery函数都执行类似的操作。这很容易,但是对于那些调用您的函数的人来说可能会造成混淆,因为它也不是自记录的。而且您的论点仍未命名。老问题,但这里有更多信息。
如其他答案所述,PHP 不直接支持命名参数。VBA 是另一种具有这种奢侈的语言。
在 PHP 中,您可以使用相当合理的替代品。PHP的数组处理特别好,可以使用关联数组传递参数数组,如下:
function foo($parms=[]) {
$username = $parms['username'] ?? '…';
$password = $parms['password'] ?? '…';
$timeout = $parms['timeout'] ?? '…';
}
foo(['timeout'=>10]);
Run Code Online (Sandbox Code Playgroud)
请注意,??如果输入数组元素不存在,则使用运算符允许一个简单的默认值。在 PHP 7 之前,您将使用?:which 略有不同,但在这种情况下会给出相同的结果。感谢@LeeGee 选择这个。
不那么圆滑,但命名参数还有另一个重要作用:它们允许您处理大量选项,而无需过长的有序参数列表。
编写函数的另一种方法是使用 `extract 函数:
function foo($parms=[]) {
$username = '…';
$password = '…';
$timeout = '…';
extract($parms,EXTR_IF_EXISTS);
}
Run Code Online (Sandbox Code Playgroud)
此处extract函数将值复制到变量中,但前提是它们已被定义。这可以防止导入您不知道的变量。
inPHP 7.*或更低版本不支持命名参数。
但是,它可能会来到PHP 8 https://wiki.php.net/rfc/named_params
让我们看看它如何结束投票阶段!:D
更新:RFC 已获批准。命名参数将在 PHP 8 中实现。
2020 年更新答案:PHP 8 将支持命名参数,RFC 已通过。
本机函数和您当前的代码都可以使用命名参数。
假设您定义了一个函数:
function foo($a = 10, $b = 20, $c = 30) {
return $a * $b - $c;
}
Run Code Online (Sandbox Code Playgroud)
你现在可以像这样调用这个函数:
foo(a: 30, c: 10, b: 5);
foo(5, c: 60, b: 10);
foo(c: 30, b: 20, a: 10);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4094 次 |
| 最近记录: |