문제

젠토에서 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 가지 방법,결과는 다음과 같습니다.

enter image description here

내가 사용하여 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

을 만들기 위해 이 테스트는,사용 스크립트

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 magento.stackexchange
scroll top