PHP中三点(...)的含义

问题描述 投票:68回答:6

PHP中的三点(...)是什么意思?

当我在我的服务器中安装Magento 2时出现错误。调查代码,发现有一个三点(...),产生错误。我提到了下面的代码

return new $type(...array_values($args));
php
6个回答
133
投票

...$str被称为splat operator in PHP

此功能允许您捕获函数的可变数量的参数,并结合传入的“普通”参数(如果您愿意)。用一个例子来看最简单:

function concatenate($transform, ...$strings) {
    $string = '';
    foreach($strings as $piece) {
        $string .= $piece;
    }
    return($transform($string));
}

echo concatenate("strtoupper", "I'd ", "like ", 4 + 2, " apples");
// This would print:
// I'D LIKE 6 APPLES

函数声明中的参数列表中包含...运算符,它基本上意味着“......其他所有内容都应该进入$ strings”。您可以将2个或更多参数传递给此函数,第二个和后续参数将添加到$ strings数组中,随时可以使用。

希望这可以帮助!


16
投票

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

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

在PHP 5.6及更高版本中,参数列表可能包含...标记,表示该函数接受可变数量的参数。参数将作为数组传递给给定变量

看来“splat”操作符不是官方名称,仍然很可爱!


4
投票

要使用此功能,只需警告PHP需要使用... operator将数组解压缩到变量中。有关更多详细信息,请参阅here,一个简单示例可能如下所示:

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

mail("[email protected]", ...$email);

3
投票

这就是所谓的“splat”运算符。基本上,这个东西转化为“任意数量的论点”; PHP 5.6引入

有关详细信息,请参阅here


3
投票

似乎没人提到它,所以留下来[它也将帮助谷歌(和其他社会企业)指导那些在PHP中要求休息参数的开发者]:

As indicated here它在JS上称为Rest参数我更喜欢这个有意义的命名而不是那个splat的东西!

在PHP中,... args提供的功能称为Variadic functions,它是在PHP5.6上引入的。使用func_get_args()实现了相同的功能。

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


1
投票

我想在Magento框架中共享此运算符的用法,它使用动态可配置参数(思想XML配置文件)实例化对象。

我们可以从下面的代码片段中看到createObject函数,它接受为对象创建准备的参数数组。然后它使用...(三个点)运算符将数组值作为类的构造函数的实参数传递。

<?php

namespace Magento\Framework\ObjectManager\Factory;

abstract class AbstractFactory implements \Magento\Framework\ObjectManager\FactoryInterface
{
    ...

    /**
     * Create object
     *
     * @param string $type
     * @param array $args
     *
     * @return object
     * @throws RuntimeException
     */
    protected function createObject($type, $args)
    {
        try {
            return new $type(...array_values($args));
        } catch (\TypeError $exception) {
            ...
        }
    }

    ...

}
© www.soinside.com 2019 - 2024. All rights reserved.