Les objets Error et Exception
Distinction entre les erreurs PHP et les exceptions du développeur
À partir de la version 7, PHP modifie sa gestion des erreurs. La majorité des erreurs sont lancent désormais une exception Error qui implémente l’interface Throwable. L’objet Exception, qui implémente également l’interface Throwable, permet au développeur de créer ses propres exceptions.
Les exceptions de type Error comme Exception remontent jusqu’à être attrapées dans un catch correspondant. S’il n’y a pas de tel bloc le gestionnaire d’exception par défaut, celui spécifié grâce à la fonction set_exception_handler() sera automatiquement invoqué. Si aucun gestionnaire d’exception par défaut n’est prévu l’erreur / exception provoquera une erreur fatale.
Hiérarchie des objets Error, Exception, Throwable
Les classes Error et Exception implémentent toutes les deux l’interface Throwable. Mais Error n’hérite pas d’Exception, tout comme Exception n’hérite pas d’Error.
Il est alors possible d’avoir différents blocs catch pour les deux objets, ou bien un bloc commun catch sur Throwable.
- Throwable
- Error
- ArithmeticError
- DivisionByZeroError
- AssertionError
- CompileError
- ParseError
- TypeError
- ArgumentCountError
- ValueError
- UnhandledMatchError
- FiberError
- ArithmeticError
- Exception
- DOMException
- IntlException
- LogicException
- BadFunctionCallException
- BadMethodCallException
- DomainException
- InvalidArgumentException
- LengthException
- OutOfRangeException
- BadFunctionCallException
- PharException
- ReflectionException
- RuntimeException
- OutOfBoundsException
- OverflowException
- RangeException
- UnderflowException
- UnexpectedValueException
- Error
Attraper de multiples exceptions
Depuis PHP 7.1 il est possible de gérer différentes exceptions dans un même catch.
try {
} catch (InvalidArgumentException | CustomException $e) {
}Quelle exception générer ?
Une LogicException est généralement utiliser lorsqu’il s’agit d’erreur de code qui devrait faire l’objet d’un correctif. La plupart du temps, on génère donc une page d’erreur et on journalise l’erreur pour en être informé et la corriger.
Une RuntimeException est générée lorsqu’une erreur survient durant l’exécution d’un programme mais qu’elle n’est pas du au programme lui-même.