Значение трех точек (...) в PHP

В чем смысл трех точек (...) в PHP?

Пока я устанавливаю Magento 2 в своем Sever, я получил ошибку. Изучите код и выясните, что существует три точки (...), которые создают ошибку. Я упомянул код ниже

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

Ответы

Ответ 1

...$str называется оператором splat в 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

Список параметров в объявлении функции имеет в нем оператор ..., и это в основном означает "... и все остальное должно идти в $stringings". Вы можете передать 2 или более аргументов в эту функцию, а второй и последующие будут добавлены в массив $strings, готовый к использованию.

Надеюсь, это поможет!

Ответ 2

Каждый ответ относится к одному и тому же сообщению в блоге, кроме них, вот официальная документация о списках аргументов переменной длины:

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

В PHP 5.6 и более поздних списки аргументов могут включать в себя токен..., обозначающий, что функция принимает переменное число аргументов. Аргументы будут переданы в данную переменную в виде массива.

Кажется, оператор "Сплат" не является официальным названием, но все же это мило!

Ответ 3

Чтобы использовать эту функцию, просто предоставьте PHP, чтобы она распаковывала массив в переменные с помощью ... operator. Подробнее см. здесь, простой пример может выглядеть следующим образом:

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

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

Ответ 4

Это так называемый оператор "splat". В основном эта вещь переводится как "любое количество аргументов"; введенный с PHP 5.6

Подробнее см. здесь.

Ответ 5

Кажется, никто не упомянул об этом, поэтому здесь, чтобы остаться [Это также поможет Google (и другим SE) направлять разработчиков, которые запрашивают параметры отдыха в PHP ]:

Как указано здесь, это называется " Параметры покоя" на JS, и я предпочитаю это осмысленное именование, а не сплат!

В PHP функциональность, предоставляемая ... args, называется функциями Variadic, которые представлены в PHP5.6. Такая же функциональность была использована для реализации с помощью func_get_args().

Чтобы использовать его правильно, вы должны использовать синтаксис остальных параметров, где бы это ни помогло уменьшить стандартный код.

Ответ 6

Я хотел бы поделиться использованием этого оператора в среде 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) {
            ...
        }
    }

    ...

}

Ответ 7

Существует два варианта использования PHP-токена ellipsis (...), которые представляют собой упаковку массива и распаковку массива. Обе цели применимы к аргументам функции.


Пакет

При определении функции, если вам нужно динамическое число переменных, предоставленных функции (т.е. вы не знаете, сколько аргументов будет предоставлено этой функции при последующем вызове в коде), используйте многоточие (...) токен для записи всех оставшихся аргументов, предоставленных этой функции, в массив, который доступен внутри функционального блока.

Например,:

// function definition
function sum(...$numbers) { // use ellipsis token when defining function
    $acc = 0;
    foreach ($numbers as $n) {
        $acc += $n;
    }
    return $acc;
}

// later, call the function
echo sum(1, 2, 3, 4); // provide any number of arguments

> 10

// and again...
echo sum(1, 2, 3, 4, 5);

> 15

Распаковка

В качестве альтернативы, при вызове функции, если аргументы, которые вы передаете этой функции, ранее объединены в массив, используйте токен ellipsis (...), чтобы преобразовать этот массив в список аргументов, предоставленный функции, которая назначает функцию каждый элемент массива для соответствующей переменной аргумента функции, указанной в определении функции.

Например:

function add($a, $b) {
    return $a + $b;
}

$a = [1, 2];
echo add(...$a); // use ellipsis token when calling function

> 3

Это особенно полезно при использовании функций массива для манипулирования массивами или переменными.

Например:

function toptwo ($first, $second) {
    echo "$first\n$second";
}

$steaks = array('ribeye', 'kc strip', 't-bone');
toptwo(...array_slice($steaks, 0, 2));

> ribeye
> kc strip