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