иерархия исключений в php

A1x

Новичок
В пхп есть некоторая иерархия исключений на картинке
Как она используется, есть у нее вообще какой-то смысл?
Есть ли смысл наследоваться от этих исключений?
Например откуда лучше наследовать какой-нибудь Error404Exception ?


php_exceptions.png
 

WMix

герр M:)ller
Партнер клуба
ErrorException
PHP:
<?php
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");

/* Exception ausloesen */
strpos();
?>
 

A1x

Новичок
WMix thanks

вопрос был где можно использовать все эти исключиния
такое впечатление что их добавили лишь бы было

■BadFunctionCallException
■BadMethodCallException
■DomainException
■InvalidArgumentException
■LengthException
■LogicException
■OutOfBoundsException
■OutOfRangeException
■OverflowException
■RangeException
■RuntimeException
■UnderflowException
■UnexpectedValueException
 

WMix

герр M:)ller
Партнер клуба
но это же все SPL если не ошибаюсь, просто за тебя написали готовую иерархию... пользуй.. и куча софта их действительно использует,..
как использовать?
BadFunctionCallException - A typical use for this exception, is in conjunction with the is_callable() function. к примеру.. если приглядется каждый Эксепшин говорит за себя где его удобно использовать... уверен их так мало лишь только потому что нехотели чтоб над разработчиками насмехались, и описали только грубую иерархию...

стоит ли от них наследовать? ну конечно же если хочешь сделать правильную обработку исключений! и реагировать на группу InvalidArgumentException иначе к примеру ошибкой на экране чем на все RuntimeException к примеру бросить лог .. а не тупо показывать трэйс...

Error404 тут трудно понять... если через какойнить curl не смог загрузить, то вероятно логическая какая нить InvalidArgument
 

AmdY

Пью пиво
Команда форума
Мне кажется это наработки на будущее, чтобы все ВНУТРЕННИЕ функции бросали перехватываемые исключения вместо ошибок.
 

Beavis

Banned
Например откуда лучше наследовать какой-нибудь Error404Exception ?
Error404Exception - это исключение уровня приложения, т.е. которое может выбрасываться, например, в контроллере.
А SPL-исключения, мне кажется, больше подходят для уровня моделей.

Т.е. это просто разные уровни исключений, и на цитируемый вопрос я бы ответил, что наследовать подобные exception'ы от SPL-исключений не стоит

я делаю обычно так
PHP:
//в контроллере:
try {
   $model->process($data);
} catch (InvalidArgumentException $e) {
   throw new Error404Exception('...');
}
 

WMix

герр M:)ller
Партнер клуба
соглашусь с тобою Beavis что Error404Exception - это МОЖЕТ БЫТЬ исключение уровня приложения.. все зависит от контента... в твоем примере, ты обернул одно исключение и создал другое, по простой причине, что обработка Error404Exception уже гдето описана выше... яб наверное просто перерутил на другую акцию... мой пример говорил о исключении как о неожиданной ошибке... я curl'ом грузил данные которые необходимы для дальнейшего выполнения скрипта, и никак не ожидал что на удаленном сервере изменились пути или еще чтонить, неважно... важно что возникло исключение из правил... а что подразумевал автор топика под Error404Exception пока осталось за кадром...

погуглив немного над BadFunctionCallException увидел под гордым флагом TYPO3 что они всеже используют SPL... я не фанат типо3 но думаю всеже что не глупые люди писали этот СиэМэС
 

A1x

Новичок
Прочитал у Роберта Мартина: для своего приложения надо делать свою иерархию исключений, исходя из того как они будут перехватываться
если используется сторонняя библиотека со своей иерархией исключений то их транслировать в исключения уровня приложения, как привел пример Beavis
 

WMix

герр M:)ller
Партнер клуба

Ragazzo

TDD interested
A1x
ты только сейчас сообразил, что разные исключения сделаны не просто так? мда...
 

Redjik

Джедай-мастер
Ragazzo
я тоже в эти дебри не лезу, тем более в yii2 обещали норм иерархию сделать
 

A1x

Новичок
Ragazzo у меня возник вопрос есть ли смысл подстраивать иерархию исключений в приложении под данную иерархию
сейчас уже возник ответ что не обязательно
 

Ragazzo

TDD interested
Redjik
Ну, у меня у каждого модуля просто есть свое исключение, которое от CException и все :D не знаю что они там с ними могут придумать) хотя конечно было бы неплохо, чтобы бросались исключения отдельно для модуля или компонента etc...
A1x
ну да, было бы странно если бы ты наследовался от IOException какого-нибудь.
 

Redjik

Джедай-мастер
Ragazzo
а не event и behavior не хочешь свой тип исключения?
или на Yii::t()
 

Ragazzo

TDD interested
Redjik
Нет, хочу чтобы бутстрап твиттеровский убрали нафиг, а то щас овер9000 начнут клепать сайты с ним, уже тошнит(
P.S. кстати иерархия бы помогла бы еще при логировании и прочих фишках думаю, ну это уже так... оффтоп...
 

Redjik

Джедай-мастер
Сорри, но продолжу оффтоп
Ragazzo
Хз - я сейчас делаю свой первый на бутстрапе, все ровненько красивенько.
Это великолепная ниша, и даже при овер9000 сайтов на нем - люди этого не будут замечать - ибо по общей массе - это капля в море.
1) Совсем нубы за него не возмутся - сложновато, особенно LESS ковырять.
2) Крупные компании тоже - они делают "свой крутой дизайн".
3) Говнокомпашки - см. пункт 1 + они берут готовые css шаблоны.
 

Ragazzo

TDD interested
Redjik
Посмотри на ru форуме) там каждый 5ый его использует) Для себя что-то можно написать на нем небольшое и хоть в опенсорс выложить, но особенно ничего интересного, приелся( но потихоньку тащу из него всякие css ) Плюс кстати в том, что по сути тот же yii-bootstrap просто обертка, и заменяет все стандартные гриды/пагинаторы/etc, т.е. особо можно и не париться, взял кинул в отдельную тему и все.
P.S. Модераторы отделите пожалуйста сообщения про Yii в новую ветку под названием Yii & twitter bootstrap usage
 

Redjik

Джедай-мастер
Ragazzo
Я giix юзаю, можно будет на досуге шаблоны переписать и админки собирать уже на бутстрапе... хм...

ЗЫ.
и вообще, на свой страх и риск, с гитхаба беру самые последние версии Yii... там для CGridView сделали пару допилов, один из которых я сначала сам сделал =)
 

Ragazzo

TDD interested
Redjik
Что за допил?тоже оттуда беру версии, но особо не следил последнее время за логами. Там хороший плюс наметился это цепочки фильтров для логирования в след. версии :)
P.S.
Стыд блин, я не знал про giix :confused:
 

Redjik

Джедай-мастер
Ragazzo
цепочка фильтров - это история поиска? если да, то как раз вот об этом допиле я узнал в YiiConf
а сам дописал filterHtmlOptions
 
Сверху