|
Как в 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) Ничего не понятно, но попробую.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |