2017-02-12 10 views
-1

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

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

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

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

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

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

+0

Вы можете использовать Google с запросом 'php three dots'. Вы будете удивлены. –

ответ

2

Это variable-length argument lists. Они новы для 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); 
?> 
1

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