[php] 클래스가 정의 된 PHP 파일 찾기 (런타임에)

PHP에 특정 클래스 (또는 함수)가 정의 된 PHP 파일을 찾을 수있는 반사 / 내관 / 마법이 있습니까?

즉, PHP 클래스 또는 인스턴스화 된 개체의 이름이 있습니다. 클래스가 정의 된 파일 시스템 경로를 반환하는 무언가 (함수, Reflection 클래스 등)에 이것을 전달하고 싶습니다 .

/path/to/class/definition.php

( get_included_files())지금까지 포함 된 모든 파일의 목록을 가져온 다음 모두 수동으로 구문 분석하는 데 사용할 수 있지만 한 번의 시도에 대한 많은 파일 시스템 액세스입니다.

또한이 정보를 어딘가에 캐시하는 __autoload 메커니즘에 추가 코드를 작성할 수 있다는 것도 알고 있습니다. 그러나 기존 __autoload를 수정하는 것은 내가 염두에 둔 상황에서 제한이 없습니다.

이를 수행 할 수있는 확장 프로그램에 대해 듣는 것은 흥미로울 것이지만 궁극적으로 “스톡”설치에서 실행할 수있는 무언가를 원합니다.



답변

시험 ReflectionClass

예:

class Foo {}
$reflector = new \ReflectionClass('Foo');
echo $reflector->getFileName();

false파일 이름을 찾을 수없는 경우 (예 : 네이티브 클래스에서) 반환 됩니다.


답변

네임 스페이스 파일의 ReflectionClass의 경우 접두사 “\”를 추가하여 다음과 같이 전역으로 만듭니다.

$ reflector = new \ ReflectionClass ( ‘FOO’);

그렇지 않으면 정의되지 않은 네임 스페이스에 ReflectionClass라는 오류가 발생합니다.
나는 위의 답변에 대해 의견을 말할 권리가 없었기 때문에 보충 답변으로 작성합니다.


답변

포함 폴더가있는 경우 다음을 수행하여 “class $ className”에 대해 “grep”에 대한 쉘 스크립트 명령을 실행할 수 있습니다. $filename = ``grep -r "class $className" $includesFolder/*\그러면 어떤 파일에 있었는지 반환합니다. 그 외에는 마법이 없다고 생각합니다. PHP가 나중에 할 수있는 함수입니다.


답변