tot*_*dli 1 php variadic-functions
我想编写一个具有可变数量参数的函数(使用...),该函数调用具有相同参数的另一个函数,并在末尾调用一个新的函数。订单很重要!下面的示例仅用于演示。
function foo(...$params) {
$extraVariable = 6;
var_dump(...$params, $extraVariable);
}
foo(2, 4, 1, 4);
Run Code Online (Sandbox Code Playgroud)
运行它时,出现以下错误消息:
PHP致命错误:在第3行的/home/user/main.php中解压缩参数后,无法使用位置参数
我如何实现我的目标?
设计不允许在参数后解压缩,但是有两种解决方法:
根据Paul的建议,从新元素创建一个数组并解压缩:
function foo(...$params) {
$extraVariable = 6;
var_dump(...$params, ...[$extraVariable]);
}
Run Code Online (Sandbox Code Playgroud)将新元素推入参数:
function foo(...$params) {
$extraVariable = 6;
$params[] = $extraVariable;
var_dump(...$args);
}
Run Code Online (Sandbox Code Playgroud)--TEST--
Positional arguments cannot be used after argument unpacking
--FILE--
<?php
var_dump(...[1, 2, 3], 4);
?>
--EXPECTF--
Fatal error: Cannot use positional argument after argument unpacking in %s on line %d
Run Code Online (Sandbox Code Playgroud)
小智 5
有一个解决方法。解包后不能使用位置参数,但可以使用多个解包参数;因此,您可以将变量包装在数组文字中,然后像这样解开它:
var_dump(...$params, ...[$extraVariable]);
Run Code Online (Sandbox Code Playgroud)