Frage

In Magento 2 werden die Klassen mit einer Objektmanager-Factory instanziiert: \Magento\Framework\ObjectManager\Factory\Factory::create().
So weit, so gut.Aber da ist etwas, das ich hier nicht verstehe.
Nach der Überprüfung, ob die Argumente, die an den Konstruktor für DI übergeben werden sollen, keine Zirkelverweise enthalten, und nachdem die Argumente ermittelt wurden, gibt es Folgendes ($args sind die Argumente, die an den Konstruktor übergeben werden sollen):

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

Warum ist das so lang switch aussage?Warum nicht direkt den Code aus dem default branch?
Oder warum aufhören die case mit 8?Warum nicht 5 oder 10 oder 127?

War es hilfreich?

Lösung

Der Grund ist die Leistung.Die Instanziierung durch new ist etwas schneller als die Reflexion.Die meisten Klassen haben weniger als 8 Argumente, sodass dieser Schalter die meisten Fälle abdeckt.

Vielleicht wird es entfernt.

Andere Tipps

Der Leistungsgewinn ist fast unsichtbar.Wenn ich versuche, 1000000 Objekte mit den 2 Methoden zu instanziieren, ist hier das Ergebnis :

enter image description here

Ich verwende die Beta- und PHP-Version von Magento 2 (siehe unten)

PHP 5.6.12-1+deb.sury.org ~ vertrauenswürdig +1 (cli) Copyright (c) 1997-2015 Die PHP-Gruppe Zend-Engine v2.6.0, Urheberrecht (c) 1998-2015 Zend Technologie mit Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, von Zend Technologies mit Xdebug v2.3.2, Copyright (c) 2002-2015, von Derick Rethans

Um diesen Test zu machen, habe ich das benutzt Skript

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top