在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?
非常床编码
—
Keyul Shah 2014年
@KeyulShah。可以,但是我几乎可以肯定这背后有一个原因。
—
马吕斯