|
Как в 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
|
|
|
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) Ничего не понятно, но попробую.
|
|
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший