我有这个代码:
function test(...$strings)
{
// ...
}
它允许我像这样调用 test():
test('a', 'series of', 'strings go here');
哪个有效。但是,我经常想这样做:
test([ 'a', 'series of', 'strings go here' ]);
或者:
test($an_array_of_strings);
事实上,当我开始收到有关“数组到字符串转换”的错误时,我非常确定这会起作用,以至于我感到震惊和困惑。
我的意思是,“...”语法是一种特殊的语言构造,专门用于将函数的可变数量的参数转换为数组!我什至不明白为什么它不会自动理解这种非常常见/有用的做法。
因为它(显然)没有,是否有某种方法可以在不必使用两个单独的函数的情况下完成此操作?我不想要一个单独的:
function test_array($strings = [])
{
// ...
}
最佳答案
反之亦然:
test(...$an_array_of_strings);
如果你想让它自动(这样你就不必使用 ...
将数组拼写到参数上),你需要手动测试 $ strings
只有一个元素,是一个数组;如果是这样,那么你在函数内部手动取消它。这使您失去了将单个数组作为单个参数传递的能力,我不推荐这样做。 IE。目前你可以区分
test([1, 2]); // one argument that is an array
test(1, 2); // two arguments that are strings
有了这样的启发式方法,您将无法再这样做了。
关于php - 如何让 PHP 理解 * 数组或函数参数的 splat 运算符(3 点 ...)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56520494/