Я хотел бы написать функцию с переменное количество параметров (используя ...
) который вызывает другую функцию с теми же аргументами и новым в конце. Заказ важен! Пример ниже только для демонстрации.
function foo(...$params) {
$extraVariable = 6;
var_dump(...$params, $extraVariable);
}
foo(2, 4, 1, 4);
Когда я запускаю его, я получаю следующее сообщение об ошибке:
Фатальная ошибка PHP: невозможно использовать позиционный аргумент после распаковки аргумента в /home/user/main.php в строке 3
Как я могу достичь своей цели?
Видите жирное слово?
Неустранимая ошибка PHP: невозможно использовать позиционный аргумент после распаковка аргумента в /home/user/main.php в строке 3
Так что пользуйся до распаковка.
var_dump($extraVariable, ...$params);
Создайте массив с новыми элементами и распакуйте его!
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