PHP Reflection API는 개발자가 런타임에 클래스, 메소드, 속성 및 기타 구조에 대한 자세한 정보를 얻을 수있는 내장 클래스 라이브러리입니다. 반사를 통해 소스 코드를 보지 않고도 PHP 프로그램을 분석하고 운영 할 수 있습니다. 이는 개발 프레임 워크, 플러그인 시스템, 종속성 분사 컨테이너 및 기타 시나리오에서 매우 실용적입니다.
반사 API는 클래스 구조를 읽을 수있을뿐만 아니라 메소드에 대한 동적 호출을 지원하고 액세스 권한을 수정하며 인스턴스화하는 객체도 지원합니다. 이것은 PHP의 유연성과 확장 성을 크게 향상시킵니다.
ReflectionClass 클래스를 사용하여 클래스의 반사 객체를 만듭니다.
$reflector = new ReflectionClass('Foo');
여기서 'foo' 는 수업의 이름입니다. 이 개체는 클래스의 구조 정보에 액세스하는 데 사용될 수 있습니다.
클래스에 정의 된 모든 방법은 getMethods 메소드를 통해 얻을 수 있습니다.
$methods = $reflector->getMethods();
$ methods 배열을 통과하면 각 방법의 이름, 매개 변수 수, 액세스 권한 등을 볼 수 있습니다.
마찬가지로 GetProperties 방법은 클래스의 모든 속성을 얻는 데 사용됩니다.
$properties = $reflector->getProperties();
이 메소드는 속성 세부 사항을 읽는 데 사용할 수있는 반사 전자 객체의 배열을 반환합니다.
반사 메트 클래스를 사용하여 특정 방법에 액세스 할 수 있습니다.
$reflector = new ReflectionMethod('Foo', 'bar');
여기서 'foo' 는 클래스 이름이고 'bar' 는 메소드 이름입니다. 생성 된 반사 객체는 방법을 분석하는 데 사용할 수 있습니다.
이 메소드는 Invoke 메소드를 사용하여 호출 할 수 있습니다.
$result = $reflector->invoke($object, $args);
$ 객체 는 클래스 인스턴스이고 $ args는 매개 변수 배열입니다. 이 메소드는 런타임시 동적 통화를 지원합니다.
개인 또는 보호 된 방법의 경우, SetAccessible 방법을 통해 접근성을 수정할 수 있습니다.
$reflector->setAccessible(true);
이를 통해 액세스 제어 및 통화 방법을 직접 우회 할 수 있으며, 종종 프레임 워크 작업 테스트 또는 기본 프레임 워크 작업에 사용됩니다.
RECINGECTROPERTY 클래스를 사용하여 특정 속성에 대한 정보를 얻으십시오.
$reflector = new ReflectionProperty('Foo', 'bar');
이는 특정 클래스의 특정 속성에 액세스하는 데 적용됩니다.
속성 값은 다음과 같은 방법으로 읽고 수정할 수 있습니다.
$value = $reflector->getValue($object);
$reflector->setValue($object, $value);
속성이 공개, 개인 또는 보호인지 여부 에 관계없이 반사로 작동 할 수 있습니다.
PHP Reflection API는 개발자에게 코드 구조의 동적 분석 및 조작을위한 강력한 도구를 제공합니다. 디버깅, 테스트 또는 프레임 워크 구축에 관계없이 중요한 역할을합니다. 반사 사용을 마스터하면 PHP 프로젝트의 유연성과 확장 성이 크게 향상 될 수 있습니다.