Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Обработка ошибок приложения

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Код возврата или Exception?
DelphinPRO
Отправлено: 17 Февраля, 2012 - 20:45:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Пишу относительно непростое приложение. MVC паттерн, модульная архитектура. Возник вопрос, как лучше организовать обработку ошибок - с помощью кодов возврата или с применением исключений?

Допустим, есть такой условный код:

PHP:
скопировать код в буфер обмена
  1.  
  2. class E_InputError extends Exception {}
  3.  
  4. class Controller
  5. {
  6.     function action()
  7.     {
  8.         $model = new Model();
  9.         try {
  10.             $model->storeData($data);
  11.         }
  12.         catch (E_InputError $e) {
  13.             // Ошибка в введенных данных. Выводим сообщение пользователю.
  14.             $this->setMessage($e->getMessage());
  15.         }
  16.         catch (Exception $e) {
  17.             // Фатальная ошибка. (например нет соединения с БД)
  18.             // убиваем скрипт
  19.             log($e->getMessage());
  20.             die();
  21.         }
  22.         $this->setMessage('Сохранено!');
  23.     }
  24. }
  25.  
  26. class Model
  27. {
  28.     function storeData($data)
  29.     {
  30.         if (!isset($data->inputFiled)) {
  31.             throw new E_InputError('Ошибка во входных данных');
  32.         }
  33.         // ....
  34.     }
  35. }
  36.  


или

PHP:
скопировать код в буфер обмена
  1.  
  2. class Controller
  3. {
  4.     function action()
  5.     {
  6.         $model = new Model();
  7.         $result = $model->storeData($data);
  8.         if ($result == false) {
  9.             // Ошибка в введенных данных. Выводим сообщение пользователю.
  10.             $this->setMessage('Ошибка');
  11.             return;
  12.         }
  13.         $this->setMessage('Сохранено!');
  14.     }
  15. }
  16.  
  17. class Model
  18. {
  19.     function storeData($data)
  20.     {
  21.         if (!isset($data->inputFiled)) {
  22.             return false;
  23.         }
  24.         // ....
  25.         return true;
  26.     }
  27. }
  28.  


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


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Мелкий Супермодератор
Отправлено: 17 Февраля, 2012 - 21:15:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




А вы ходите пешком или добираетесь транспортом? Почему вы ставите ИЛИ между этими способами? Они используются совместно. Исключения - для исключительных событий и возвраты - для пользовательских.


-----
PostgreSQL DBA
 
 Top
Okula
Отправлено: 17 Февраля, 2012 - 21:34:04
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




Исключения не применяются для обработки пользовательских ошибок, это изначально неверный подход. Исключения нужно применять в тех случаях, которые напрямую не зависят от пользователя.
Такие как - отсутствие файла шаблона, отсутствие соединения с БД, неожиданное завершение классов и ошибки пораждаемые внутри классов (опять же, не св/занные с пользовательским функционалом), отсутствие библиотек на сервере и т.д.
 
 Top
DelphinPRO
Отправлено: 17 Февраля, 2012 - 22:38:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




спасибо


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB