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

时间:2018-04-11 18:06:58

标签: php variadic-functions

任务

我想用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中解压缩后,无法使用位置参数

我如何实现目标?

3 个答案:

答案 0 :(得分:1)

看到粗体字?

  

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

所以在强拆包之前使用

ViewController

答案 1 :(得分:0)

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

答案 2 :(得分:0)

有一个解决方法。您不能在解压缩一个参数后使用位置参数,但可以使用多个解压缩的参数。因此,您只需将变量包装在数组文字中,然后像这样解开包装即可:

E