1. 성찰이란 무엇인가요?
PHP 실행 상태에서 PHP 프로그램 분석을 확장하고 주석을 포함하여 클래스, 메소드, 속성, 매개변수 등에 대한 자세한 정보를 내보내거나 추출하는 것을 의미합니다. 이렇게 동적으로 정보를 얻고 객체의 메소드를 동적으로 호출하는 기능을 리플렉션 API라고 합니다.
Reflection은 객체 지향 패러다임 메타모델을 조작하기 위한 API로, 매우 강력하며 복잡하고 확장 가능한 애플리케이션을 구축하는 데 도움이 될 수 있습니다.
플러그인, 자동 문서 생성, PHP 언어 확장에도 사용할 수 있습니다. 3. Reflection의 구체적인 응용 사례 - CI 프레임워크의 구현 예를 예로 들어보겠습니다.
이 메서드의 핵심 논리는 CI_Upload를 인스턴스화할 때 호출자가 $config 배열을 전달하고 배열의 모든 구성이 해당 배열에 할당된다는 것입니다. 클래스 멤버 속성(속성에 해당하는 set_* 메소드가 있는 경우 set_* 메소드 호출)
방법 1. 리플렉션 없이 작성 방법:
public function initialize(array $config = array(), $reset = TRUE){ $reflection = new ReflectionClass($this); ... #遍历config,如果存在set_方法调用set方法,没有则直接赋值 foreach ($config as $key => $v) { if (method_exists($this, 'set_' . $key)) { $this->{'set_' . $key}($v); }else{ $this->$key =$v; } } ...
리플렉션을 사용하여 판단할 수 있습니다. 여기서 리플렉션의 이점은 클래스에 속성이 있는지 여부를 결정할 수 있다는 것입니다(
). hasProperty
),和判断类是否存在方法(hasMethod
방법 2. CI 프레임워크 내에서 구현
D:\project\app\system\libraries\Upload.php/** * Initialize preferences * * @param array $config * @param bool $reset * @return CI_Upload */public function initialize(array $config = array(), $reset = TRUE){ $reflection = new ReflectionClass($this); ... foreach ($config as $key => &$value) { if ($key[0] !== '_' && $reflection->hasProperty($key)) { if ($reflection->hasMethod('set_'.$key)) { $this->{'set_'.$key}($value); } else { $this->$key = $value; } } } ...
추상 클래스
인지 여부, 인스턴스화 가능 여부, 클래스가 최종인지 또는 클래스인지 여부) abstract) - 클래스의 메소드, 메소드 존재 여부, 메소드 반환 값, 메소드 주석, 메소드 이름 - 클래스 속성, 정적 속성, 상수
- 위치
네임스페이스
네임스페이스 위와 같은 상황이신 분들을 위해, 리플렉션을 사용하여 문제를 해결할 수도 있습니다 :)
위 내용은 PHP 고급 기능 - 자세한 반영 예시의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!