Поиск файла PHP (во время выполнения), в котором был определен класс
Есть ли отражение/интроспекция/магия в PHP, которая позволит вам найти файл PHP, где определен конкретный класс (или функция)?
Другими словами, у меня есть имя класса PHP или экземпляр объекта. Я хочу передать это что-то (функция, класс Reflection и т.д.), Которые вернут путь к файловой системе, где был определен класс.
/path/to/class/definition.php
Я понимаю, что я мог бы использовать (get_included_files())
, чтобы получить список всех файлов, которые были включены до сих пор, а затем проанализировать их все вручную, но для этого много доступа к файловой системе для одной попытки.
Я также понимаю, что могу написать дополнительный код в нашем механизме __autoload, который где-то кэширует эту информацию. Тем не менее, изменение существующей __autoload не зависит от ситуации, о которой я имею в виду.
Услышав о расширениях, которые могут это сделать, было бы интересно, но в конечном итоге мне понравилось бы что-то, что можно запустить с установкой "запаса".
Ответы
Ответ 1
Попробуйте
Пример:
class Foo {}
$reflector = new ReflectionClass('Foo');
echo $reflector->getFileName();
Это возвращает false
, когда имя файла не может быть найдено, например. на родных классах.
Ответ 2
Для ReflectionClass в файле с именами добавьте префикс "\", чтобы сделать его глобальным следующим:
$reflector = new\ReflectionClass ('FOO');
Или иначе, он будет генерировать ошибку, указанную ReflectionClass в пространстве имен, не определенном.
У меня не было прав комментировать вышеупомянутый ответ, поэтому я пишу это как дополнительный ответ.
Ответ 3
если у вас есть папка с включениями, вы можете запустить команду оболочки script для "grep" для "class $className", выполнив: $filename = ``grep -r "class $className" $includesFolder/*\
и вернет файл, в котором он был. Кроме этого, я не думайте, что для PHP есть какая-то волшебная функция для этого.