programing

클래스가 정의된 PHP 파일(실행 시) 찾기

goodjava 2022. 10. 23. 21:27

클래스가 정의된 PHP 파일(실행 시) 찾기

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

즉, PHP 클래스 또는 인스턴스화된 객체의 이름을 가지고 있습니다.클래스가 정의된 파일 시스템 경로를 반환하는 항목(함수, 반사 클래스 등)에 전달합니다.

/path/to/class/definition.php

(을) 사용할 수 있다는 것을 깨달았습니다.get_included_files())지금까지 포함된 모든 파일의 목록을 가져오고 모든 파일을 수동으로 구문 분석합니다. 단 한 번의 시도에는 많은 파일 시스템 액세스가 필요합니다.

또한 이 정보를 캐시하는 __autoload 메커니즘에 추가 코드를 작성할 수도 있습니다.단, 기존 __autoload를 변경하는 것은 제가 생각하는 상황에서는 허용되지 않습니다.

이 기능을 사용할 수 있는 확장에 대해 들어보는 것도 좋지만, 궁극적으로는 "스톡" 설치에서 실행할 수 있는 것을 원합니다.

해라ReflectionClass

  • Reflection Class : : get File Name :파일명을 가져옵니다.

예:

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

이것은 돌아올 것이다.false예를 들어 네이티브 클래스에서 파일 이름을 찾을 수 없는 경우

namesched 파일의 ReflectionClass의 경우 접두사 "\"를 추가하여 다음과 같이 글로벌하게 만듭니다.

$syslog = new \Reflection Class('FOO');

그렇지 않으면 정의되지 않은 네임스페이스에 ReflectionClass라는 오류가 생성됩니다.위 답변에 대해 코멘트를 할 권한이 없었기 때문에 보충 답변으로 이 글을 씁니다.

리플렉터를 사용하여 다음과 같은 기능을 구축할 수 있습니다.

function file_by_function( $function_name ){
    if( function_exists( $function_name ) ){
        $reflector = new \ReflectionFunction( $function_name );
    }
    elseif( class_exists( $function_name ) ){
        $reflector = new \ReflectionClass( $function_name );
    }
    else{
        return false;
    }
    return $reflector->getFileName();
}

file_by_function('Foo')은 Foo가 함수 또는 클래스인 경우 Foo가 정의된 파일 경로를 반환하고 파일을 찾을 수 없는 경우 false를 반환합니다.

includes 폴더가 있는 경우 셸 스크립트명령어를 실행하여 "class $className"에 대해 "grep"할 수 있습니다.$filename = ``grep -r "class $className" $includesFolder/*\그게 어떤 파일에 들어있는지 알 수 있어요그 외에는 PHP가 대신 할 수 있는 매직 기능은 없다고 생각합니다.

언급URL : https://stackoverflow.com/questions/2420066/finding-the-php-file-at-run-time-where-a-class-was-defined