Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
try{
myApplication::dispatch();
} catch(Exception $e){
//обработка
}
class ErrorHandler {
public function __invoke($severity, $message, $file, $line) {
throw new ErrorException($message, 0, $severity, $file, $line);
}
}
set_error_handler(new ErrorHandler);
PHP Notice: Use of undefined constant myvar - assumed 'myvar'" и "PHP Warning: mysql_connect(): [2002] A connection attempt failed" вполне достойны для того, чтобы бросить исключение.1. на главной написано «Just 20kb of 100% OOP source code», а настройки сделаны через глобальные константы;
2. коду два года (так написано на главной), а в коде есть тудушки с элементарными вещами, за такое время можно было додлеать
В PHP аж три «механизма ошибок»: собственно ошибки (error), исключения (exception) и утверждения (assertion). Свести три механизма к одному — exception.
Да такой подход предполагает внимательную обработку исключений. В месте где обработка критична нужно будет обработать все исключения (вплоть до верхнеуровневого — Exception)
А если нужно передать из функции кроме факта ошибки(return false) еще и детали ошибки, то можно передать скажем ассоциативный массив, в котором будет тип/номер ошибки, меседж, ит.п
Как показывает достаточно широкая практика, из функции надо очень-очень редко вернуть что-то отличное от false
// Временный объект, будет собирать нам ошибки.
$handler = new ErrorHandler();
соединим $database.ReportError с $handler.OnError
// Все сломалось?
if( ! $database.DoSomeComplexAction() )
{
// Получаем текст с красивым сообщением о том, что именно поломалось внутри
// $database.
$text = $handler.PrettyPrint();
// Информируем соответствующий View о том, что пользователю нужно
// показать страничку с нашими внутренностями.
$erro_view.Show( $text );
}
Правильная обработка ошибок в PHP