PHP致命错误:参数解包后不能使用位置参数

z9zf31ra  于 2022-12-10  发布在  PHP
关注(0)|答案(3)|浏览(171)

目标
我想写一个参数个数可变的函数(使用...),它调用另一个具有相同参数的函数,并在末尾调用一个新的。顺序很重要!下面的例子只是为了演示。
我所尝试的

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

问题

当我运行它时,我收到以下错误消息:
PHP致命错误:在第3行的/home/user/main. php中解包参数后无法使用位置参数
我怎样才能实现我的目标?

t5zmwmid

t5zmwmid1#

tl;dr

根据设计,不允许在参数之后解包,但有两种解决方法:

function foo(...$params) {
    $extraVariable = 6;
    var_dump(...$params, ...[$extraVariable]);
}
  • 将新元素推入参数:
function foo(...$params) {
    $extraVariable = 6;
    $params[] = $extraVariable;
    var_dump(...$args);
}

说明

PHP根本不支持这个功能。

--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
ymdaylpp

ymdaylpp2#

看到粗体字了吗?
PHP致命错误:在/home/user/main. php中第3行的参数解包后不能使用位置参数
所以在拆包之前先用它。

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

bqucvtff3#

有一个变通办法。你不能在一个未压缩的参数后使用位置参数,但是你可以使用几个未压缩的参数;因此,您可以将变量 Package 在数组文字中,然后按如下方式展开:

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

相关问题