PHP致命错误:参数解包后无法使用位置参数

问题描述 投票:0回答:3

任务

我想用variable number of parameters (using ...)编写一个函数,它调用另一个具有相同参数的函数,最后调用一个新函数。订单很重要!以下示例仅用于演示。

我试过了什么

function foo(...$params) {
    $extraVariable = 6;
    var_dump(...$params, $extraVariable);
}
foo(2, 4, 1, 4);

问题

当我运行它时,我收到以下错误消息:

PHP致命错误:在第3行的/home/user/main.php中解压缩后,不能使用位置参数

我怎样才能实现目标?

php variadic-functions
3个回答
3
投票

tl;博士

设计不允许在参数后解包,但有2个解决方法:

  • 从新元素创建一个数组并将其解压缩为Paul suggestedfunction 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

1
投票

看到粗体字?

PHP致命错误:在第3行的/home/user/main.php中解压缩后,不能使用位置参数

所以在打开包装之前使用它。

var_dump($extraVariable, ...$params);

0
投票

有一个解决方法。在解压缩之后你不能使用位置参数,但你可以使用几个解压缩的参数;所以你可以将你的变量包装在数组文字中并像这样解开它:

var_dump(...$params, ...[$extraVariable]);
© www.soinside.com 2019 - 2024. All rights reserved.