Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Для профи > function error() vs object::setError() vs catch (E


Автор: Vaulter 5.7.2007, 17:06
тема такая:
function error() vs object::setError() vs catch (Exception $e)

у кого какие конструктивные мысли на этот счет.
плюсы минусы подходов.

Автор: Scorched 5.7.2007, 18:47
кэтч конечно. примущества те же, что и у объектно-ориентированного подхода над структуным )) писать в ОО-стиле, не используя эксепшены -- по меньшей мере плохой стиль. что мы зря переходили на пхп5. что зря на пхп-5 переходили?? давайте еще и старыми классами попльзоваться. 

опрос типа - "каким подходом вы пользуетесь: современным или устаревшим?"

Автор: Vaulter 5.7.2007, 18:54
Scorched,  smile  smile 

Автор: sTa1kEr 5.7.2007, 19:01
Имхо, еще не хватает варианта trigger_error() with set_error_handler(). А вообще, конечно, try catch, хотя у него есть некоторый недостаток, по сравнению со всеми другими способами - тормознутость.

Автор: Scorched 5.7.2007, 19:16
sTa1kEr

тогда и set_exception_handler добавить ))
насчет быстродействия. но ведь в случае если эксепшен не возник, то наличие трай-кетч блока, "замедляет" выполнение программы не более, чем обычный иф, а если возник - то тут уже сам эксепшн важнее того, что он чуть дольше обрабатывается..

Автор: sTa1kEr 5.7.2007, 19:59
Цитата(Scorched @  5.7.2007,  19:16 Найти цитируемый пост)
set_exception_handler
 нужен только для не перехваченных экзепшенов, а зачем кидать экзепшены и не перехватывать их? Зачем они тогда вообще нужны? smile
А вот trigger_error() действительно иногда используется и, имхо, чаще, чем какая-нибудь function error().
Цитата(Scorched @  5.7.2007,  19:16 Найти цитируемый пост)
насчет быстродействия. но ведь в случае если эксепшен не возник, то наличие трай-кетч блока, "замедляет" выполнение программы не более, чем обычный иф, а если возник - то тут уже сам эксепшн важнее того, что он чуть дольше обрабатывается.. 

Да, по сути верно smile Но экзепшен не обязательно должен выкидываться только при критической ошибке, может быть ситуация когда приложение нормально работает не смотря на экзепшенны (не доступен удаленный сервер - просто выведем предупреждение, отключаем соответствующий модуль и работаем дальше; произошла ошибка при парсинге данных - пишем в лог и парсим дальше, итп). В общем производительность - это, имхо, единственный минус конструкций try catch, но плюсы, перевешивают этот минус. Про минусы остальных подходов - даже не буду говорить - это и так очевидно.

Кстати, как то видел эмуляцию try catch в PHP 4, конструкции вида:
Код

$error = false;
do
{
   // Работаем
   if ($not_vaild_var) 
   {
      $error = "Ошибка!";
      break;
   }
   // Работаем дальше, т.к. если бы было что-то не так, то мы бы уже вылетели из фиктивного цикла :)
}
while(false)
if ($error !== false)
{
   //
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)