当我在服务器上安装Magento 2时,我得到了一个错误。在调查代码后,发现有三个点(…),这是产生错误。我附上了我在下面找到的代码:

return new $type(...array_values($args));

这个运算符叫什么,它的目的是什么?


当前回答

每个答案都引用了同一篇博客文章,除此之外,这里是关于变长参数列表的官方文档:

http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list

在PHP 5.6及以后版本中,参数列表可能包括…标记,表示函数接受可变数量的参数。参数将作为数组传递给给定的变量

看来“啪啪”运算符不是一个正式的名字,不过还是挺可爱的!

其他回答

在PHP 8.1中,语法“(…)”被用作创建可调用对象的新方法。

PHP 8.1之前:

$callable = [$this, 'myMethod'];

PHP 8.1之后:

$callable = $this->myMethod(...);

来源:https://wiki.php.net/rfc/first_class_callable_syntax

要使用此特性,只需警告PHP需要使用…将数组解压缩为变量。操作符。更多细节请看这里,一个简单的例子可以是这样的:

$email[] = "Hi there";
$email[] = "Thanks for registering, hope you like it";

mail("someone@example.com", ...$email);

每个答案都引用了同一篇博客文章,除此之外,这里是关于变长参数列表的官方文档:

http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list

在PHP 5.6及以后版本中,参数列表可能包括…标记,表示函数接受可变数量的参数。参数将作为数组传递给给定的变量

看来“啪啪”运算符不是一个正式的名字,不过还是挺可爱的!

似乎没有人提到它,所以在这里停留[它也将帮助谷歌(和其他SEs)指导开发人员在PHP中要求休息参数]:

正如这里所指出的,它被称为JS上的Rest参数&我更喜欢这个有意义的命名而不是那个飞溅的东西!

在PHP中,由…args被称为可变参数函数,这是在PHP5.6中引入的。使用func_get_args()实现了相同的功能。

为了正确地使用它,应该在任何有助于减少样板代码的地方使用rest参数语法。

这就是字面上的意思。PHP中的splat操作符,但在其他语言中被称为splat操作符。2014年LornaJane的一篇博客文章中提到:

这个特性允许您捕获一个函数的可变数量的参数,如果您愿意,还可以结合传入的“普通”参数。最简单的例子是: 函数连接($transform,…$strings) { $string = "; Foreach ($strings作为$piece) { $string .= $piece; } 返回(转换美元($ string)); } echo concatenate("strtoupper", "I'd ", "like ", 4 + 2, " apples");

(这将打印我想要6个苹果)

函数声明中的参数列表具有…运算符在里面,基本上意思是“…其他的都应该放到$strings中。您可以向该函数传递2个或更多参数,第二个和后续的参数将被添加到$strings数组中,随时可以使用。