W Magento 2 klasy są instancja przy użyciu menedżera fabryki obiektu: \Magento\Framework\ObjectManager\Factory\Factory::create()
.
Do tej pory tak bardzo. Ale jest coś, czego tutaj nie rozumiem.
Po sprawdzeniu, czy w argumentach nie ma odwołań cyklicznych, które powinny być przekazane do konstruktora dla DI, a po ustaleniu argumentów jest to ( $args
są argumenty, które należy przekazać do konstruktora):
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);
}
Dlaczego to długie switch
stwierdzenie? Dlaczego nie użyć bezpośrednio kodu z default
oddziału?
Lub dlaczego zatrzymać case
na 8? Dlaczego nie 5, 10 lub 127?