Получить номер текущей строки в PHP

Для логгирования иногда важно не только записать какое то сообщение, но также указать — где именно произошло событие в скрипте. Давайте посмотрим, как можно получить номер строки и имя файла в PHP.

Данная информация может быть предоставлена php функцией debug_backtrace(), которая предоставляет информацию о состоянии стека вызова функций в виде массива.

Пример массива, который возвращает debug_backtrace():

Здесь есть имя файла и номер строки, где была вызвана некая функция getInfo.

Оформим нашу идею в виде функции, которая возвращает описание места в скрипте, откуда она была вызвана в программе:

Т.е. если мы вызовем её где то в нашей программе, она вернет нам имя файла и номер строки.

Если вызов функции используется в обертке другой функции, к примеру той, что пишет сообщение в лог файл, то нужно посмотреть глубже в стек, чтобы получить требуемые данные.

Виртуальный лог

Оформим эту идею в виде виртуального класса.

Основная функция класса — log выводит сообщение просто на экран, поэтому я назвал класс виртуальным. А чтобы сообщение сохранялось в базу или в файл — требуется переписать эту функцию в дочернем классе.

Вторая особенность — функция log не добавляет имя файла и номер строки в сообщение, сохраняя возможность прямого вывода. Вместо этого реализованы еще два метода, которые это делают. Один из них error, принимает на входе объект Exception и использует его данные. А второй — message — использует уже знакомую функцию getInfo.

Пользоваться классом просто:

Скрипт выведет что то вроде следующего:

Логгирование в файл

Т.к. в консоль писать не очень интересно на практике, то давайте сделаем сохранение данных в файл. Для этого создадим дочерний класс, реализующий возможность записи лога в указанный файл.

При инициализации класса нужно указать имя файла, а дальше использовать всё те же методы:

Ну и пример с обработкой исключения:

Мало букафф? Читайте есчо !

Можно ли вызвать статический метод trait в php, не подключая его к какому то классу?

Май 27, 2025 г.

Если коротко - нельзя. Вызвать какой метод трейта напрямую без подключения его к классу невозможно, т.к. трейты в PHP не являются самостоятельными сущностями, как классы или объекты. Трейт — это механизм "вклейки" кода в класс. Он не компилируется ...

Читать

Замена первого/последнего значения в строке на PHP

Октябрь 28, 2022 г.

Задача - заменить первое/последнее искомое значение в заданной строке. В PHP много уделяется внимания работы со строками, но вот оптимального решения для этой задачи нет. Функция str_replace, заменяет все значения, но может посчитать вам сколько ...

Читать

Что использовать вместо mysql_escape_string() в Drupal 7?

Сентябрь 6, 2016 г.

Начиная с версии PHP 4.3.0, функция mysql_escape_string() считается устаревшей. PHP будет выдавать соответствующее предупреждение. Deprecated function: mysql_escape_string(): This function is deprecated; use mysql_real_escape_string() instead. Т.е. ...

Читать

Отправить PUT запрос через cUrl в PHP

Май 19, 2021 г.

Делюсь примером кода, который отправляет PUT запрос через CURL. Все работает точно также как для POST запроса, с небольшими отличиями в настройках: [crayon-6a9153e669d65132166893/] Надеюсь, этот пример сэкономит вам время :)

Читать
 

Комментарии к «Получить номер текущей строки в PHP»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: