Question

Dans magento 2, les classes sont instanciées à l'aide d'une usine de gestion d'objets : \Magento\Framework\ObjectManager\Factory\Factory::create().
Jusqu'ici tout va bien.Mais il y a quelque chose que je ne comprends pas ici.
Après avoir vérifié s'il n'y a pas de références circulaires dans les arguments qui doivent être transmis au constructeur pour DI et une fois les arguments déterminés, il y a ceci ($args sont les arguments qui doivent être passés au constructeur) :

    switch (count($args)) {
        case 1:
            return new $type($args[0]);
        case 2:
            return new $type($args[0], $args[1]);
        case 3:
            return new $type($args[0], $args[1], $args[2]);
        case 4:
            return new $type($args[0], $args[1], $args[2], $args[3]);
        case 5:
            return new $type($args[0], $args[1], $args[2], $args[3], $args[4]);
        case 6:
            return new $type($args[0], $args[1], $args[2], $args[3], $args[4], $args[5]);
        case 7:
            return new $type($args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6]);
        case 8:
            return new $type($args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6], $args[7]);
        default:
            $reflection = new \ReflectionClass($type);
            return $reflection->newInstanceArgs($args);
    }

Pourquoi est-ce long switch déclaration?Pourquoi ne pas utiliser directement le code du default bifurquer?
Ou pourquoi arrêter le case à 8?Pourquoi pas 5 ou 10 ou 127 ?

Était-ce utile?

La solution

La raison est la performance.L'instanciation via new est légèrement plus rapide que la réflexion.La plupart des classes ont moins de 8 arguments, ce commutateur couvre donc la plupart des cas.

Peut-être qu'il sera supprimé.

Autres conseils

Le gain de performances est presque invisible.Lorsque j'essaye d'instancier 1000000 objets avec les 2 méthodes, voici le résultat :

enter image description here

J'utilise la version Magento 2 Beta et PHP (voir ci-dessous)

PHP 5.6.12-1 + Deb.Sury.org ~ Trusty + 1 (CLI) Copyright (C) 1997-2015 Le groupe PHP Zend Engine V2.6.0, Copyright (C) 1998-2015 Zend Technologies avec Zend Opcache V7.0.6 -Dev, Copyright (C) 1999-2015, par Zend Technologies avec Xdebug V2.3.2, Copyright (C) 2002-2015, par Derick Rethans

Pour faire ce test, j'ai utilisé ceci scénario

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top