FractalizeR
Новичок
Знает ли исключение о том, кто его возбудил и как?
Добрый день.
Меня интересует такой вопрос. Разрабатывая для себя небольшой простой класс для удобной работы с MySQL, я подумал, что было бы неплохо разработать и custom-класс исключения, который бы еще и выполнял очистку, если это требуется (скажем, Rollback транзакции, если она была начата).
Но проблема в том, что конструктор и деструктор класса исключения вызываются при любом варианте его использования , даже если имеет место блок catch. Но ведь если исключение перехвачено, это значит, код, его перехвативший знает, что делает и, возможно, ему вовсе не требуется выполнять эту самую очистку.
Можно ли из класса исключения узнать, было ли исключение перехвачено блоком catch или нет?
set_exception_handler не слишком красивое решение такой проблемы, так как этот обработчик должен знать все о всех классах исключений в проекте.
Исследование результата debug_backtrace тоже ничего не дает, так как блоки try-catch там не фиксируются.
Есть вариант вызова в catch блоках функции $MyException->noCleanupNeeded(), а очистку выполнять в деструкторе исключения. Но, может, есть более оригинальные решения?
[Сразу скажу, что, конечно, написание всяких таких классов уже по сто раз написанных другими разработчиками - изобретение велосипеда, тем не менее, для меня полезно в образовательных целях
]
Добрый день.
Меня интересует такой вопрос. Разрабатывая для себя небольшой простой класс для удобной работы с MySQL, я подумал, что было бы неплохо разработать и custom-класс исключения, который бы еще и выполнял очистку, если это требуется (скажем, Rollback транзакции, если она была начата).
Но проблема в том, что конструктор и деструктор класса исключения вызываются при любом варианте его использования , даже если имеет место блок catch. Но ведь если исключение перехвачено, это значит, код, его перехвативший знает, что делает и, возможно, ему вовсе не требуется выполнять эту самую очистку.
Можно ли из класса исключения узнать, было ли исключение перехвачено блоком catch или нет?
set_exception_handler не слишком красивое решение такой проблемы, так как этот обработчик должен знать все о всех классах исключений в проекте.
Исследование результата debug_backtrace тоже ничего не дает, так как блоки try-catch там не фиксируются.
Есть вариант вызова в catch блоках функции $MyException->noCleanupNeeded(), а очистку выполнять в деструкторе исключения. Но, может, есть более оригинальные решения?
[Сразу скажу, что, конечно, написание всяких таких классов уже по сто раз написанных другими разработчиками - изобретение велосипеда, тем не менее, для меня полезно в образовательных целях
