SPL предоставляет иерархию стандартных исключений:
LogicException (ошибки в логике, могут быть найдены при code review)
├── BadFunctionCallException
├── BadMethodCallException
├── DomainException // нарушение бизнес-правила
├── InvalidArgumentException // неверный аргумент
├── LengthException
├── OutOfRangeException // индекс вне диапазона (compile-time)
└── OverflowException
RuntimeException (ошибки, обнаруживаемые только в runtime)
├── OutOfBoundsException // индекс вне диапазона (runtime)
├── RangeException
├── UnderflowException
└── UnexpectedValueExceptionИспользуйте эти классы (или наследуйте от них) вместо голого Exception - это позволяет ловить ошибки по категориям.