Slim 연구 노트 5 의존 주입 용기 (보충)

3830 단어 slim
위에서 우리는 Pimple 용기의 구체적인 실현을 연구했고, 이 부분에서 슬림 기본 용기의 실현 세부 사항을 살펴보았다.간단한 탐색 코드를 통해 알 수 있듯이 슬림 기본 용기는 사실 Pimple 용기에 대한 봉인된 것이다.앞서 알려진 Slim\Container는 기본 구성 항목을 통합하고 기본 서비스를 등록했습니다.이제 나머지 코드를 이어서 봅시다. 
    /**
     *                  
     * Finds an entry of the container by its identifier and returns it.
     *
     * @param string $id Identifier of the entry to look for.
     *
     * @throws ContainerValueNotFoundException  No entry was found for this identifier.
     * @throws ContainerException               Error while retrieving the entry.
     *
     * @return mixed Entry.
     */
    public function get($id)
    {
        //            
        if (!$this->offsetExists($id)) {
            throw new ContainerValueNotFoundException(sprintf('Identifier "%s" is not defined.', $id));
        }
        try {
            //   $id         
            return $this->offsetGet($id);
        } catch (\InvalidArgumentException $exception) {
            //     offsetGet()    。
            if ($this->exceptionThrownByContainer($exception)) {
                throw new SlimContainerException(
                    sprintf('Container error while retrieving "%s"', $id),
                    null,
                    $exception
                );
            } else {
                throw $exception;
            }
        }
    }

진도를 연구하기 위해서 우리는 잠시 이상을 상세하게 설명하지 않을 것이다. 다음에 우리는 전문적으로 한 장과 절을 준비하여 이상류를 연구할 것이다.대체로 이상에 대한 이해는 필수적이다.
PHP 표준 라이브러리는 내장된 이상 클래스를 제공합니다.
유난히
  • BadFunctionCallException - 오류 함수 호출 예외
  • BadMethodCallException - 오류 메소드 호출 예외
  • DomainException - 역할 영역 이상
  • InvalidArgumentException - 잘못된 매개변수 예외
  • LengthException - 길이 예외
  • LogicException - 논리적 예외
  • OutOfBoundsException-안전 원칙에 어긋나는 이상
  • OutOfRangeException - 경계 색인 예외
  • Overflow Exception - 오버플로우 예외
  • RangeException - 범위 예외
  • RuntimeException - 런타임 예외
  • UnderflowException - 오버플로우 예외
  • UnexpectedValueException - 예기치 않은 수치 예외
  • 용기가 이상류를 어떻게 사용하는지 알아봅시다.
        private function exceptionThrownByContainer(\InvalidArgumentException $exception)
        {
            //     (      、   、     )
            $trace = $exception->getTrace()[0];
    
            return $trace['class'] === PimpleContainer::class && $trace['function'] === 'offsetGet';
        }

    exception 이상 대상의 getTrace () 방법은 오류 클래스, 오류 파일 주소 등 정보를 포함하는 그룹을 되돌려줍니다.첫 번째 항목을 찾은 다음, 이 종류의offsetGet 방법에 이상이 있는지 되돌려줍니다.
    왜 이렇게 써야 합니까?
    사실 이해하기 어렵지 않다. 프로그램이 잘못되었을 때, 우리는 일반적으로 이상 보고 위치를 확인하려면, 모두 이상 클래스를 사용자 정의한다.그러나 SPL의 표준 이상 클래스를 사용했습니다. 오류 메시지에\Invalid Argument Exception 이상이 여러 군데 존재할 수 있습니다. 현재 방법이 오류 위치인지 어떻게 확인해야 합니까?여기에 사용자 정의 판단 함수를 사용하여 추적 정보에 따라 오류 위치를 확정하는 방식을 사용합니다.
    OK, 나머지 코드를 함께 찾아보자.
       /**
         *                 ,   true。
         * Returns true if the container can return an entry for the given identifier.
         * Returns false otherwise.
         *
         * @param string $id Identifier of the entry to look for.
         *
         * @return boolean
         */
        public function has($id)
        {
            return $this->offsetExists($id);
        }
    
    
        /********************************************************************************
         * Magic methods for convenience
         *******************************************************************************/
        //     ,          __get   ,    get  
        public function __get($name)
        {
            return $this->get($name);
        }
        //     ,          isset() empty() ,__isset()    
        public function __isset($name)
        {
            return $this->has($name);
        }

    오랜 노력 끝에 용기에 대해 잘 아실 거라 믿습니다.비록 길이 험난하지만 우리는 마침내 어려움을 극복하고 묵묵히 성장하여 전진의 큰 걸음을 거두었다.유자도 여기까지 견지한 모든 사람들이 집착한다고 믿으니 칭찬할 만하다!하하!

    좋은 웹페이지 즐겨찾기