php 의 반사 상세 해석 및 예시 코드

2951 단어 php반사
최근 자바 프로 그래 밍 사상 을 보고 유형 정보 라 는 장 을 보고 이런 정보 와 반사 개념 을 이야기 했다.참고 로 phop 의 반사 물 을 복습 하 다.매 뉴 얼 은 이렇게 말 했다."PHP 5 는 완전한 반사 API 를 가지 고 클래스,인터페이스,함수,방법 과 확장 에 대해 역방향 공 사 를 하 는 능력 을 추가 했다."또한 반사 API 는 함수,클래스,방법 에 있 는 문서 주석 을 꺼 내 는 방법 을 제공 합 니 다."물론 수첩 에 있 는 말 은 추상 적 이다!역방향 설 백 이란 클래스,방법,속성,매개 변수 등에 대한 상세 한 정 보 를 얻 을 수 있 습 니 다.주석 을 포함 합 니 다!글 이 항상 그렇게 무미건조 하 니,예 를 들 어 보 자.

class Foo {
  public  $foo = 1;
  protected $bar = 2;
  private  $baz = 3;
  
  /**
   * Enter description here ...
   */
  public function myMethod()
  {
    echo 'hello 2b';
  }
}

$ref = new ReflectionClass('Foo');
$props = $ref->getProperties();
foreach ($props as $value) {
  echo $value->getName()."
"; } //output //foo //bar //baz
ReflectionClass 라 는 클래스 가 되 돌아 올 때 특정한 유형의 관련 정보,예 를 들 어 속성,방법,네 임 스페이스,인터페이스 실현 등!이전 예 에서 ReflectionClass:getProperties 는 ReflectionProperties 대상 의 배열 을 되 돌려 줍 니 다.
ReflectionProperty 류 는 클래스 의 속성 에 관 한 정 보 를 보고 합 니 다.예 를 들 면  isDefault isPrivate  isProtected isPublic isStatic 등 방법 getName 은 속성 을 가 져 오 는 이름 입 니 다!
이상 은 속성 을 얻 는 것 이 고,클래스 를 얻 는 방법 도 있 습 니 다.예 를 들 어

class Foo {
  public  $foo = 1;
  protected $bar = 2;
  private  $baz = 3;
  
  /**
   * Enter description here ...
   */
  public function myMethod()
  {
    echo 'hello 2b';
  }
}

$ref = new ReflectionClass('Foo');
$method = $ref->getMethod('myMethod');
$method->invoke($ref->newInstance());

ReflectionClass:getMethod 는 반대로 ReflectionMethod 유형 입 니 다.ReflectionMethod 류 는 방법 에 대한 정 보 를 보 고 했 습 니 다.예 를 들 어 isAbstract isPrivate 입 니 다.  isProtected isPublic isStatic   isConstructor,그리고 중요 한 방법 이 있 습 니 다.Invoke,InvokeArgs 가 바로 실행 방법 입 니 다!
다른 대상 은 수첩 을 볼 수 있 습 니 다.어렵 지 않 습 니 다!
그 반 사 는 도대체 어떤 용도 가 있 습 니까?
반 사 는 동적 운행 의 개념 으로 그들 을 종합 적 으로 사용 하면 우리 가 다른 유형,인터페이스,방법,속성,방법 과 확장 을 분석 하 는 데 도움 을 줄 수 있다.동적 에이전트 와 같은 모델 도 구축 할 수 있다.일부 phop 프레임 워 크 에서 반사 도 자주 사용 합 니 다.예 를 들 어 kohana,yii,다음은 kohana 의 뮤 직 비디오 실현 코드 입 니 다.바로 반사!

// Start validation of the controller
$class = new ReflectionClass(ucfirst(Router::$controller).'_Controller');
// Create a new controller instance
$controller = $class->newInstance();
// Load the controller method
$method = $class->getMethod(Router::$method);
// Execute the controller method
$method->invokeArgs($controller, $arguments);
위의 코드 는 이 프레임 의 절 차 를 뚜렷하게 볼 수 있 습 니 다!Router 를 통 해 url 클래스 를 처리 합 니 다.Router 를 통 해 어떤 컨트롤 러,어떤 방법 을 얻 을 수 있 습 니까?그리고 방법 을 집행 하 겠 습 니 다!
이상 은 바로 PHP 에 반 사 된 자 료 를 정리 하고 후속 적 으로 관련 자 료 를 계속 보충 하 는 것 입 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기