Поиск файла PHP (во время выполнения), в котором был определен класс

Есть ли отражение / интроспекция / магия в PHP, которая позволит вам найти файл PHP, в котором определен конкретный класс (или функция)?

Другими словами, у меня есть имя класса PHP или экземпляр объекта. Я хочу передать это чему-то (функции, классу Reflection и т. Д.), Которые вернут путь к файловой системе, где был определен класс.

/path/to/class/definition.php 

Я понимаю, что могу использовать ( get_included_files()) чтобы получить список всех файлов, которые были включены до сих пор, а затем проанализировать их все вручную, но это очень много доступа к файловой системе для одной попытки.

Я также понимаю, что могу написать дополнительный код в нашем механизме __autoload, который где-то кэширует эту информацию. Тем не менее, изменение существующей __autoload не зависит от ситуации, которую я имею в виду.

Услышав о расширениях, которые могут это сделать, было бы интересно, но в конечном итоге мне понравилось что-то, что можно запустить на «складе».

Solutions Collecting From Web of "Поиск файла PHP (во время выполнения), в котором был определен класс"

Пытаться

  • ReflectionClass :: getFileName – возвращает имя файла

Пример:

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

Это вернет false если имя файла невозможно найти, например, на родных классах.

Для ReflectionClass в файле с расширением имен добавьте префикс «\», чтобы сделать его глобальным следующим:

$ reflector = new \ ReflectionClass ('FOO');

Или иначе, он будет генерировать ошибку, указанную ReflectionClass в пространстве имен, не определенном. У меня не было прав комментировать вышеупомянутый ответ, поэтому я пишу это как дополнительный ответ.

если у вас есть папка с включениями, вы можете запустить команду сценария оболочки для «grep» для «class $ className», выполнив: $filename = ``grep -r "class $className" $includesFolder/*\ и он вернет, что файл, в котором он был. Кроме этого, я не думаю, что для PHP есть какая-то волшебная функция для нее.