Есть ли отражение / интроспекция / магия в PHP, которая позволит вам найти файл PHP, в котором определен конкретный класс (или функция)?
Другими словами, у меня есть имя класса PHP или экземпляр объекта. Я хочу передать это чему-то (функции, классу Reflection и т. Д.), Которые вернут путь к файловой системе, где был определен класс.
/path/to/class/definition.php
Я понимаю, что могу использовать ( get_included_files())
чтобы получить список всех файлов, которые были включены до сих пор, а затем проанализировать их все вручную, но это очень много доступа к файловой системе для одной попытки.
Я также понимаю, что могу написать дополнительный код в нашем механизме __autoload, который где-то кэширует эту информацию. Тем не менее, изменение существующей __autoload не зависит от ситуации, которую я имею в виду.
Услышав о расширениях, которые могут это сделать, было бы интересно, но в конечном итоге мне понравилось что-то, что можно запустить на «складе».
Пытаться
Пример:
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 есть какая-то волшебная функция для нее.