Slim 연구 노트 5 의존 주입 용기 (보충)
3830 단어 slim
/**
*
* 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 표준 라이브러리는 내장된 이상 클래스를 제공합니다.
유난히
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);
}
오랜 노력 끝에 용기에 대해 잘 아실 거라 믿습니다.비록 길이 험난하지만 우리는 마침내 어려움을 극복하고 묵묵히 성장하여 전진의 큰 걸음을 거두었다.유자도 여기까지 견지한 모든 사람들이 집착한다고 믿으니 칭찬할 만하다!하하!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Slim 연구 노트 5 의존 주입 용기 (보충)위에서 우리는 Pimple 용기의 구체적인 실현을 연구했고, 이 부분에서 슬림 기본 용기의 실현 세부 사항을 살펴보았다.간단한 탐색 코드를 통해 알 수 있듯이 슬림 기본 용기는 사실 Pimple 용기에 대한 봉인된 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.