Как получить файл или класс в котором произошло исключение в php?

Здравствуйте ! Всех с новым годом!

Есть вопрос касающийся темы исключении в php. Ситуация такая : есть класс А, есть класс В который наследует А, есть класс С который наследует В. Визуально А --> В --> C. Допустим я написал класс MyException который наследует класс Exception и пусть класс А использует MyException. Вопрос : Как получить номер строку, имя файла где произошло ошибка?

Я пробовал но получал номер строку из класса(файла) А но не В например, хотя исключение выброшено в В или даже в С.
То есть получается я должен везде прописать try-->throw MyException-->catch чтобы получить где произошла ошибка?

С Уважением,
Алмас
  • Вопрос задан
  • 2565 просмотров
Пригласить эксперта
Ответы на вопрос 4
FanatPHP
@FanatPHP
Чебуратор тега РНР
Непонятно, при чем здесь все это Авраам родил Исаака, Исаак родил Иакова, Иаков родил Иуду и братьев его.

Дело не в том, кто кому наследует, а в том, кто кого вызывает.
И в том, что ты пишешь ерунду. РНР как раз показыавет ровно то место, где было брошено искючение. И поэтому тебе надо не "номер строку, имя файла где произошло ошибка" - они у тебя и так уже есть, - а нужен стек вызовов. Потому что определить, какая строка послужила первопричиной ошибки, может только программист.

Если не лезть кривыми руками в механизм исключений, то он сам выдает стек вызовов. Это наилучший вариант. Но если так хочется все испортить - то получать вручную, через getTrace().

В общем, скорее всего ты что-то делаешь неправильно. Покажи код, и тебе напишут, как сделать правильно.
Ответ написан
socengel
@socengel
7 лет native php в продакшене, онлайн 20000+,
php.net/manual/ru/function.set-error-handler.php Это может помочь хотя точно сказать не могу.
try catch для того и создан чтобы отлавливать заведомо возможные ошибки.
__FILE__ , __LINE__ - Волшебные константы тоже могут помочь.
Ответ написан
@jslby
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
xdebug ?!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы