В Magento 2 класи інстанціруются з допомогою об'єкта менеджер заводу: \Magento\Framework\ObjectManager\Factory\Factory::create().
Поки що гу. Але є щось таке, чого я тут не розумію.
Після перевірки, чи немає кругових посилань у аргументах, які слід передати конструктору для DI, і після визначення аргументів, це таке ( $argsє аргументи, які слід передавати конструктору):
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);
}
Чому це довге switchтвердження? Чому б не використовувати безпосередньо код з defaultгілки?
Або навіщо зупинятись caseна 8? Чому б не 5 чи 10 чи 127?
