2017-02-12 3 views
-1

Voici une fonction que l'on peut trouver dans le code principal de Magento 2.Qu'est-ce que `...` faire dans une instance d'un objet PHP

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

Cette fonction est instancié $type (qui est un paramètre de chaîne) avec les arguments $args (qui est un paramètre de tableau).

Ce que je ne reçois pas est ces 3 points (...). Est-ce une syntaxe valide du tout? Je n'ai jamais trouvé une telle instanciation d'objet avant !!

J'ai essayé d'enlever ces points et d'essayer de charger une page. Il donne des erreurs fatales. Il semble donc que ces trois points ne sont pas accidentellement arrivés là-bas.

Il semble que ce code ne fonctionnera pas pour les versions php-5.3 ou inférieures. Donc c'est quelque chose de nouveau que je n'ai pu trouver nulle part.

+0

Vous pouvez utiliser google avec une requête 'php three dots' Vous serez surpris. –

Répondre

2

Il s'agit d'un variable-length argument lists. Ils sont nouveaux pour PHP 5.6.x. Cet exemple est tiré du manuel PHP:

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

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

C'est un excellent moyen d'utiliser array comme paramètre de fonction ou liste d'arguments. En fait, c'est le remplacement de la fonction func_get_args(). Variable-length argument lists