Это нужно для адаптации к штатному обработчику ошибок. Я сто раз
давал тебе ссылку, ты видимо ни разу не прочитал. Из раза в раз про эти эксепшены идиотские.
Это нужно для того, чтобы на штатные нотисы или варнинги бросалось исключение. Его отлавливает мой дебаггер. Для этого устанавливается свой обработчик:
set_error_handler([$this, 'setException']);
Этот обработчик бросает исключение.
public function setException($code, $message, $file, $line)
{
if (error_reporting() & $code) {
throw new ErrorException($message, $code, $file, $line);
}
}
И если приглядеться внимательно, то там можно разглядеть, что меняются местами аргументы. Дело в том, что set_error_handler в callback передает их не в том порядке.
Кроме того, если бросать исключения на триггер и нотисы, то тогда в отчете будет файл и линия выброса исключения, а не кода, который вызвал ошибку. Для этого
вот сия затея.
Вот и всё. Теперь мой дебаггер ловит и все неотловленные ексепшены, и trigger_error, и шатные нотисы и варнинги. А это значит, что всё можно красиво слогировать в одном месте. А trigger_error вместо throw нужен чтобы увидеть или слогировать
все ошибки сразу. Потому что неотловленное исключение остановит скрипт.
При этом вообще никаких помех отловить ексепшен внутри скриптов. И нет никакой надобности их распределять по уровням. Дебаггер сделает это сам.
Для того, чтобы понять, нужно один раз попробовать. У дебаггера два режима. Для приложения и для самого фреймворка. Если стоит первый, то в стеке цепочка фреймворка игнорируется. Чтобы не путаться в дебрях. Там видно прохождение только по приложению. Если второй режим - видно все полностью. Вот еще раз сфотаю, и давайте закончим тыркать меня эксепшенами.
UPD За грамматику огромное спасибо. :)
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.