Зачем в zf2 пустой интерфейс для пустого Exception?

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Это невозможно, PHP можно ловить только instanceof \Exception.
Так и вижу крайне категоричное выражение лица и поднятый кверху указательный палец.

Вот этот код
PHP:
interface PackageExceptionInterface {}

class CustomPackageException extends ErrorException implements PackageExceptionInterface {}

try {
    throw new CustomPackageException('Пытаемся споймать...');
} catch (PackageExceptionInterface $e) {
    echo $e->getMessage() . ' - и таки удалось!';
}
у меня отрабатывает, выводя "Пытаемся споймать... - и таки удалось!". ЧЯДНТ?
 

WMix

герр M:)ller
Партнер клуба
не понимаю что плохого в том, что обьеденился некоторый набор Exceptions воедино

дальше простой пример, мне было лень придумывать но как идея думаю будет понятно
есть такой набор
Код:
    LogicException (extends Exception)
        BadFunctionCallException
            BadMethodCallException
        DomainException
        InvalidArgumentException
        LengthException
        OutOfRangeException
    RuntimeException (extends Exception)
        OutOfBoundsException
        OverflowException
        RangeException
        UnderflowException
        UnexpectedValueException
и допустим мы наследовали
PHP:
class MyBadMethodCallException extends BadMethodCallException{}
class MyOutOfBoundsException extends OutOfBoundsException{}
и хотим написать обработчик только если вернулось исключение MyBadMethodCallException или MyOutOfBoundsException остальные исключения обрабатываются на другом уровне
отсюда простое решение написать новую пустую сущьность MyException
PHP:
class MyBadMethodCallException extends BadMethodCallException implements MyException{} 
class MyOutOfBoundsException extends OutOfBoundsException implements MyException{}
и уже можно проверять instanceOf(MyException)
 

fixxxer

К.О.
Партнер клуба
Все хитрее (и одновременно проще) - это рантайм, а не компайл-тайм проверка
PHP:
interface IE {}

class E extends \Exception implements IE {}
class X implements IE {}

try {
    throw new E;
} catch (IE $e) {
    var_dump(get_class($e));
}
try {
    throw new X;
} catch (IE $e) {
    var_dump(get_class($e));
}
Код:
string(1) "E"

Fatal error: Exceptions must be valid objects derived from the Exception base class in /Users/fixxxer/tmp/1.php on line 14
 
Сверху