PHP 의 반사 로 의뢰 모드 설명

위탁 모델 은 소프트웨어 디자인 모델 중의 기본 적 인 기교 이다.의뢰 모드 에 서 는 두 대상 이 같은 요청 을 처리 하 는 데 참여 하고 요청 을 받 은 대상 은 다른 대상 에 게 의뢰 하여 처리 합 니 다.위탁 모델 은 기본 적 인 기교 로 많은 다른 모델,예 를 들 어 상태 모델,전략 모델,방문 자 모델 은 본질 적 으로 더욱 특수 한 상황 에서 위탁 모델 을 채택 했다.
동적 의뢰 의 소개:동적 의뢰 개념 은 자카르타 바이트 프로젝트 라 이브 러 리(Byte-Code Engineering Library,BCEL)에서 나온다.이 는 존재 하 는 종 류 를 분석 할 수 있 고 인터페이스,추상 류,심지어 실 행 될 때의 구체 적 인 유형 에 있어 바이트 인 코딩 의뢰 류 를 생 성 할 수 있다.
위 탁 된 인터페이스/클래스 는 다음 과 같은 조건 을 만족 시 켜 야 합 니 다.동적 의뢰 는 최대 한 클래스 만 의뢰 할 수 있 지만 여러 인 터 페 이 스 를 대리 할 수 있 습 니 다.이 제한 은 자바 의 단일 계승 모드 에서 나온다.하나의 자바 류 는 최대 한 개의 부모 류 만 있다.생 성 된 위탁 류 가 피 위탁 류 를 부모 류 로 하 는 이상 여러 피 위탁 류 를 지정 하 는 것 은 불합리 하 다.피 위탁 류 가 지정 되 지 않 았 다 면,결 성 된 부 류 는 Object 입 니 다.
다음은 PHP 반사 메커니즘 이 동적 에이 전 트 를 실현 하 는 코드 입 니 다.

target[] = new Fruit();
 }
 function __call($name, $args) 
 {
 foreach ($this->target as $obj) 
 {
 $r = new ReflectionClass($obj);
 if ($method = $r->getMethod($name)) 
 {
 if ($method->isPublic() && !$method->isAbstract()) 
 {
  return $method->invoke($obj, $args);
 }
 }
 }
 }
}
$obj = new FruitDelegator();
$obj->callFruit();
//     
// Generate an Apple
?>
프 루트 대신 프 루트 델 레 가 터 를 대리 하 는 방법 을 알 수 있다.
마찬가지 로 다음 코드 도 실행 할 수 있 습 니 다.

target[] = $obj;
 }
 function __call($name, $args) 
 {
 foreach ($this->target as $obj) 
 {
 $r = new ReflectionClass($obj);
 if ($method = $r->getMethod($name)) 
 {
 if ($method->isPublic() && !$method->isAbstract()) 
 {
  return $method->invoke($obj, $args);
 }
 }
 }
 }
}
$obj = new ColorDelegator();
$obj->addObject(new Color());
$obj->callColor();
?>
전통 방식:
전통 적 인 방식 에서 우 리 는 현재 조작 이 인출 조작 인지 예금 조작 인지 판단 하고 Bank 류 중의 인출 조작 과 저금 조작 을 각각 호출 해 야 한다.
의뢰 모드:
의뢰 모드 에서 저 희 는 클 라 이언 트 의 판단 조작 이 필요 하지 않 습 니 다.클 라 이언 트 에 게 어떤 조작 이 필요 한 지 직접 조작 유형 에 들 어가 면 됩 니 다.Bank 류 는 조작 유형 을 자동 으로 판단 하고 해당 하 는 조작 결 과 를 되 돌려 줄 수 있 습 니 다.우리 의 조작 유형 이 매우 많 을 때 클 라 이언 트 가 if else 로 판단 하 는 것 은 매우 무 서운 것 이다.만약 에 우리 가 많은 곳 에서 이 판단 코드 를 가 져 야 한다 면 우 리 는 이런 곳 의 판단 코드 를 모두 수정 해 야 한다(나중에 추 가 된 판단).의뢰 모델 을 사용 하면 우 리 는 새로 추 가 된 곳 에 해당 하 는 유형 을 추가 하면 된다.다른 곳 의 클 라 이언 트 코드 를 바 꿀 필요 가 없습니다.
총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.더 많은 내용 을 알 고 싶다 면 아래 링크 를 보 세 요.

좋은 웹페이지 즐겨찾기