En Magento 2 las clases son instanciados utilizando un administrador de objetos de fábrica: \Magento\Framework\ObjectManager\Factory\Factory::create()
.
Hasta ahora todo bien. Pero hay algo que no entiendo aquí.
Después de verificar si no hay referencias circulares en los argumentos que se deben pasar al constructor para DI y después de que se determinen los argumentos, existe esto ( $args
son los argumentos que se deben pasar al constructor):
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 qué es esta larga switch
declaración? ¿Por qué no usar directamente el código de la default
sucursal?
¿O por qué parar a las case
8? ¿Por qué no 5 o 10 o 127?