variadic functions — PHP Fatal error: невозможно использовать позиционный аргумент после распаковки аргумента

задача

Я хотел бы написать функцию с переменное количество параметров (используя ...) который вызывает другую функцию с теми же аргументами и новым в конце. Заказ важен! Пример ниже только для демонстрации.

Что я пробовал

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

проблема

Когда я запускаю его, я получаю следующее сообщение об ошибке:

Фатальная ошибка PHP: невозможно использовать позиционный аргумент после распаковки аргумента в /home/user/main.php в строке 3

Как я могу достичь своей цели?

0

Решение

Видите жирное слово?

Неустранимая ошибка PHP: невозможно использовать позиционный аргумент после распаковка аргумента в /home/user/main.php в строке 3

Так что пользуйся до распаковка.

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

Другие решения

ТЛ; др

Создайте массив с новыми элементами и распакуйте его!

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

объяснение

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
0

По вопросам рекламы [email protected]