Goal
我想写一个函数可变数量的参数(使用...) https://secure.php.net/manual/en/functions.arguments.php#functions.variable-arg-list.new使用相同的参数和新的参数调用另一个函数在最后。订单很重要!下面的例子只是为了演示。
我尝试过的
function foo(...$params) {
$extraVariable = 6;
var_dump(...$params, $extraVariable);
}
foo(2, 4, 1, 4);
Problem
当我运行它时,我收到以下错误消息:
PHP 致命错误:在第 3 行 /home/user/main.php 中解包参数后无法使用位置参数
我怎样才能实现我的目标?
tl;dr
设计上不允许在参数后解包,但有 3 种解决方法:
-
从新元素创建一个数组并将其解压为保罗建议 https://stackoverflow.com/posts/comments/86579098:
function foo(...$params) {
$extraVariable = 6;
var_dump(...$params, ...[$extraVariable]);
}
-
将新元素推送到参数:
function foo(...$params) {
$extraVariable = 6;
$params[] = $extraVariable;
var_dump(...$args);
}
-
如果包装的函数具有命名参数,只需添加额外的参数作为命名参数,如下所示詹姆斯建议 https://stackoverflow.com/a/74778728/1494454:
// needs PHP 8.1
function foo(...$params) {
$extraVariable = true;
array_search(...$params, strict: $extraVariable);
}
解释
PHP 根本不支持这一点。您可以看到检查此行为的单元测试 https://github.com/php/php-src/blob/master/Zend/tests/arg_unpack/positional_arg_after_unpack_error.phpt:
--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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)