Magento2 인스턴스화하는 클래스를 통해 개체 관리자가 공장
-
12-12-2019 - |
문제
젠토에서 2 개의 클래스의 인스턴스를 사용하는 객체 관리자를 공장: \Magento\Framework\ObjectManager\Factory\Factory::create()
.
지금까지 그래서 goo.하지만 무언가가있을 이해하지 못하는 여기에.
후 확인이 없는 경우에는 원형 참조에서 인수로 전달되어야 한다 생성자를 위한 디후의 인수를 결정이 이($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?
해결책
그 이유는 성능이다.인스턴스화를 통해 새로운 약간보다 빠르게 반영합니다.대부분의 클래스가 8 개 이 인수 그렇게 이 스위치 커버는 가장 경우입니다.
어쩌면 그것을 제거할 수 있습니다.
다른 팁
의 성능을 얻는 것은 거의 보이지 않습니다.하려고 할 때 인스턴스화 1000000 개체 2 가지 방법,결과는 다음과 같습니다.
내가 사용하여 Magento2 베타 PHP 버전을(아래 참조)
PHP5.6.12-1+deb.sury.org~믿을 수 있+1(cli)Copyright(c)1997-2015 의 PHP 그룹 젠 엔진 v2.6.0,Copyright(c)1998-2015 젠드 기술 와 젠 OPcache v7.0.6-dev,Copyright(c)1999-2015,여 젠 기술 와 Xdebug v2.3.2,Copyright(c)2002-2015,여 데릭 Rethans
을 만들기 위해 이 테스트는,사용 스크립트