Что `...` делать в объектах PHP

Ниже приведена функция, которую мы можем найти в основном коде Magento 2.

protected function createObject($type, $args)
{
    return new $type(...array_values($args));
}

Эта функция является экземпляром $type (который является строковым параметром) с аргументами $args (который является параметром массива).

То, что я не получаю, это те 3 точки (...). Это правильный синтаксис вообще? Я никогда не находил такой объект экземпляр прежде!!

Я попытался удалить эти точки и попытаться загрузить страницу. Это дает фатальные ошибки. Таким образом, кажется, что эти три точки не случайно попали туда.

Кажется, что этот код не будет работать для php-5.3 или более поздних версий. Так что это что-то новое, что я нигде не смог найти.

2 ответа

Решение

Это списки аргументов переменной длины. Они являются новыми для PHP 5.6.x. Этот пример из руководства по PHP:

<?php
function sum(...$numbers) {
    $acc = 0;
    foreach ($numbers as $n) {
        $acc += $n;
    }
    return $acc;
}

echo sum(1, 2, 3, 4);
?>

Это отличный способ использовать массив в качестве параметра функции или списка аргументов. На самом деле, это замена для func_get_args() функция. Списки аргументов переменной длины

Другие вопросы по тегам