PHP Fatal error: Cannot use positional argument after argument unpacking
PHP Fatal error: Cannot use positional argument after argument unpacking
任务
我想用 variable number of parameters (using ...
) 编写一个函数,它调用另一个具有相同参数的函数,并在末尾调用一个新函数。顺序很重要!下面的例子只是为了演示。
我尝试了什么
function foo(...$params) {
$extraVariable = 6;
var_dump(...$params, $extraVariable);
}
foo(2, 4, 1, 4);
问题
当我 运行 它时,我收到以下错误消息:
PHP Fatal error: Cannot use positional argument after argument unpacking in /home/user/main.php on line 3
我怎样才能实现我的目标?
tl;博士
设计不允许在参数后解包,但有 2 个解决方法:
从新元素创建一个数组并将其解压为 Paul suggested:
function foo(...$params) {
$extraVariable = 6;
var_dump(...$params, ...[$extraVariable]);
}
将新元素推送到参数:
function foo(...$params) {
$extraVariable = 6;
$params[] = $extraVariable;
var_dump(...$args);
}
说明
PHP根本不支持这个。你可以看到 unit test that checks this behavior:
--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
看到粗体字了吗?
PHP Fatal error: Cannot use positional argument after argument unpacking in /home/user/main.php on line 3
所以在解压之前使用它。
var_dump($extraVariable, ...$params);
是一种解决方法。你不能在一个解包后使用位置参数,但你可以使用多个解包参数;所以你可以将你的变量包装在数组文字中并像这样打开它:
var_dump(...$params, ...[$extraVariable]);
任务
我想用 variable number of parameters (using ...
) 编写一个函数,它调用另一个具有相同参数的函数,并在末尾调用一个新函数。顺序很重要!下面的例子只是为了演示。
我尝试了什么
function foo(...$params) {
$extraVariable = 6;
var_dump(...$params, $extraVariable);
}
foo(2, 4, 1, 4);
问题
当我 运行 它时,我收到以下错误消息:
PHP Fatal error: Cannot use positional argument after argument unpacking in /home/user/main.php on line 3
我怎样才能实现我的目标?
tl;博士
设计不允许在参数后解包,但有 2 个解决方法:
从新元素创建一个数组并将其解压为 Paul suggested:
function foo(...$params) { $extraVariable = 6; var_dump(...$params, ...[$extraVariable]); }
将新元素推送到参数:
function foo(...$params) { $extraVariable = 6; $params[] = $extraVariable; var_dump(...$args); }
说明
PHP根本不支持这个。你可以看到 unit test that checks this behavior:
--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
看到粗体字了吗?
PHP Fatal error: Cannot use positional argument after argument unpacking in /home/user/main.php on line 3
所以在解压之前使用它。
var_dump($extraVariable, ...$params);
是一种解决方法。你不能在一个解包后使用位置参数,但你可以使用多个解包参数;所以你可以将你的变量包装在数组文字中并像这样打开它:
var_dump(...$params, ...[$extraVariable]);