Pergunta

No magento 2 as classes são instanciadas usando um gerenciador de objetos de fábrica: \Magento\Framework\ObjectManager\Factory\Factory::create().
Tão longe tão goo.Mas há algo que não entendo aqui.
Depois de verificar se não existem referências circulares nos argumentos que devem ser passados para o construtor para DI e depois os argumentos são determinados não é este ($args são os argumentos que devem ser passados para o construtor):

    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);
    }

Por que esta longa switch declaração?Por que não usar diretamente o código do default ramo?
Ou por que parar o case em 8?Por que não 5 ou 10 ou 127?

Foi útil?

Solução

O motivo é o desempenho.Instanciação através de novo é um pouco mais rápido do que a reflexão.A maioria das turmas tem menos de 8 argumentos para que essa opção cobre a maioria dos casos.

Talvez ele vai ser removido.

Outras dicas

O ganho de desempenho é quase invisível.Quando eu tento instanciar 1000000 objetos com os 2 métodos, aqui está o resultado :

enter image description here

Estou usando o Magento 2 Beta e a versão do PHP (veja abaixo)

PHP 5.6.12-1+deb.sury.org~fiel+1 (cli) Copyright (c) 1997-2015 O PHP Grupo Zend Motor v2.6.0, Copyright (c) 1998-2015 Zend Tecnologias com Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, pela Zend Technologies com o Xdebug v2.3.2, Copyright (c) 2002-2015, por Derick Rethans

Para fazer esse teste, eu usei esse script

Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top