Имя: Пароль:
IT
 
Как в PHP узнать место (файл и номер строки), в котором находится код функции?
0 Грю
 
11.01.23
18:42
Например, в коде есть такой вызов:

$list->printHeader();

Нужно выяснить, в каком файле находится код, который будет выполнен при вызове этой команды. Оно находится где-то не в текущем файле, а неизвестно где.

Отладчиком прыгнуть нельзя, можно только добавить команду вывода отладочных данных в консоль, или как-угодно еще изменить код.
1 Kassern
 
11.01.23
18:46
Наверное в каком нибудь пхп шторме, или подобных средах разработки такое можно.
2 Волшебник
 
модератор
11.01.23
18:58
echo __DIR__ . '/' . __FILE__;
3 ДедМорроз
 
11.01.23
19:18
Когда php читает описание объекта,то он превращает текстовый код во внутренний формат и размещает в памяти - у этого кода должны быть ссылки на те места в файле,где описаны функции.
Правда,не факт,что их можно достать кодом php,но написать к php отдельный модуль,который это делает,вполне можно,если уже не написали.
4 ДедМорроз
 
11.01.23
19:21
https://www.php.net/manual/en/reflectionclass.getfilename.php
Как я и говорил,уже сделали.
5 mistеr
 
11.01.23
19:59
(0) grep или аналоги.
6 Asmody
 
11.01.23
20:28
(4) этого недостаточно, метод может быть унаследован.
Что-то типа
$refClass = new \ReflectionClass($list);
$refMethod = $refClass->getMethod('printHeader');
echo $refMethod->getFileName();
7 Грю
 
11.01.23
21:03
(1) Наверное можно. Но как, вот в чем вопрос.
8 Грю
 
11.01.23
21:03
(2) Это выводит только название текущего файла. А надо файл, в котором та функция записана.
9 Грю
 
11.01.23
21:05
(4) Это даст название файла с классом, я этот метод уже и сам нашел. А мне нужно найти место, где именно код функции.
10 Грю
 
11.01.23
21:06
(5) grep не находит. А что за аналоги?
11 Грю
 
11.01.23
21:07
(6) Это может быть то что нужно. Спасибо!
12 mistеr
 
11.01.23
21:54
(10) Если греп не находит, то и аналоги не найдут. Значит не там или не так ищешь.
13 Asmody
 
11.01.23
22:05
(11) вот это даст номер строки https://www.php.net/manual/en/reflectionfunctionabstract.getstartline.php
наверно.
только читай там внимательно про рефлекшн в php, там есть особенности
14 Грю
 
11.01.23
22:43
(12) Вот потому я и создал эту тему. Если бы грепом можно было найти, то вопроса бы не было.
Похоже, что там название функции синтезируется как-то так: "print" . "Header"
И такую строку невозможно найти ни грепом, ни пхп штормом.
15 Грю
 
11.01.23
22:44
(13) Ничего не понятно, но попробую.