Есть ли в PHP какое-либо отражение / самоанализ / магия, которая позволит вам найти файл PHP, в котором был определен конкретный класс (или функция)?
Другими словами, у меня есть имя класса PHP или созданного объекта. Я хочу передать это чему-то (функции, классу Reflection и т. Д.), Который вернет путь к файловой системе, в которой был определен класс.
/path/to/class/definition.php
Я понимаю, что могу использовать ( get_included_files())
чтобы получить список всех файлов, которые были включены до сих пор, а затем проанализировать их все вручную, но это большой объем доступа к файловой системе для одной попытки.
Я также понимаю, что могу написать дополнительный код в нашем механизме __autoload, который где-то кэширует эту информацию. Однако изменение существующего __autoload запрещено в ситуации, которую я имею в виду.
Было бы интересно услышать о расширениях, которые могут это сделать, но в конечном итоге я бы хотел что-то, что могло бы работать на "стандартной" установке.
источник
Ответы:
Пытаться
ReflectionClass
Пример:
Это вернется,
false
если имя файла не может быть найдено, например, в собственных классах.источник
Для ReflectionClass в файле с пространством имен добавьте префикс «\», чтобы сделать его глобальным, как показано ниже:
В противном случае он сгенерирует ошибку ReflectionClass в не определенном пространстве имен. У меня не было прав комментировать приведенный выше ответ, поэтому я пишу это как дополнительный ответ.
источник
если у вас была папка include, вы могли бы запустить команду сценария оболочки для «grep» для «class $ className», выполнив:
$filename = ``grep -r "class $className" $includesFolder/*\
и она вернет, в каком файле он был. Кроме этого, я не думаю, что есть какая-то магия функция для PHP, чтобы сделать это за вас.источник