Поиск файла 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 есть какая-то волшебная функция для этого.