PHP et les Throwable, Error, Exception

par

dans

Fonctionnement depuis PHP 7

Depuis PHP 7, la plupart des erreurs sont signalées via une exception de type Error (ou qui étend Error). Comme toutes exceptions, les exceptions de type Error remontent jusqu’à être attrapées par un catch correspondant ou bien, s’il n’y en a pas, par le gestionnaire d’exception défini par défaut avec la fonction set_exception_handler(). S’il n’y a pas de gestionnaire d’exception, l’exception sera convertie en erreur fatale et sera traitée comme une erreur traditionnelle (comme avant PHP 7).

Attention : Les exceptions de type Error ou qui étendent la classe Error n’héritent pas de la classe Exception. Par conséquent, un code tel que catch (Exception $e) ne les interceptera pas. Il faudra au choix :

  • Un code tel que : catch (Error $e).
  • Un code tel que : catch (Exception|Error $e).
  • Un code tel que : catch (Throwable $e).
  • Un gestionnaire d’exception défini avec set_exception_handler().

Hiérarchie

Throwable
  ├── Error
  │     ├── ArithmeticError
  │     │       └── DivisionByZeroError
  │     ├── AssertionError
  │     ├── CompileError
  │     │       └── ParseError
  │     ├── TypeError
  │     │       └── ArgumentCountError
  │     ├── ValueError
  │     ├── UnhandledMatchError
  |     ├── FiberError
  |     └── Random\RandomError
  │     │       └── BrokenRandomEngineError
  |     └── DateError
  |             ├── DateObjectError
  │             └── DateRangeError
  └── Exception
        ├── ClosedGeneratorException
        ├── DOMException
        ├── ErrorException
        ├── IntlException
        ├── JsonException
        ├── LogicException
        │       ├── BadFunctionCallException
        │       │        └── BadMethodCallException
        │       ├── DomainException
        │       ├── InvalidArgumentException
        │       ├── LengthException
        │       └── OutOfRangeException
        ├── PharException
        ├── ReflectionException
        ├── RuntimeException
        │       ├── OutOfBoundsException
        │       ├── OverflowException
        │       ├── RangeException
        │       ├── UnderflowException
        │       ├── UnexpectedValueException
        │       └── PDOException
        ├── SodiumException
        ├── FiberExit
        ├── Random\RandomException
        ├── SQLite3Exception
        ├── DateException
        │       ├── DateInvalidTimeZoneException
        │       ├── DateInvalidOperationException
        │       ├── DateMalformedStringException
        │       ├── DateMalformedIntervalStringException
        │       └── DateMalformedPeriodStringException
        └── RequestParseBodyException

Usage

Exception / ErrorDescription cas d’usage
ErrorClasse de base pour toutes les erreurs internes de PHP.
ArithmeticErrorSurvient quand une erreur se produit lors d’une opération mathématique.
DivisionByZeroErrorSurvient quand un nombre essaye d’être divisé par zéro.
AssertionErrorSurvient quand une assertion faite avec assert() échoue.
CompileErrorSurvient quand une erreur de compilation se produit.
ParseErrorSurvient quand une erreur se produit lors de l’analyse de code PHP.
TypeErrorSurvient quand :
– La valeur définit pour une propriété de classe ne correspond pas au type déclaré pour cette propriété.
– Le type de l’argument passé à une fonction ne correspond pas au type déclaré pour le paramètre correspondant.
– Une valeur retournée par une fonction ne correspond pas au type de retour déclaré par la fonction.
ArgumentCountErrorSurvient quand trop ou trop peu d’arguments sont passés à une fonction.
ValueErrorSurvient lorsque le type d’un argument est correct mais que sa valeur est incorrecte. Par exemple, si l’on passe un entier négatif alors que la fonction attend un entier positif, ou si l’on passe une chaîne ou un tableau vide alors que la fonction s’attend à ce qu’il ne soit pas vide.
UnhandledMatchErrorSurvient lorsque le sujet transmis à une expression match n’est traité par aucun cas de cette même expression.
FiberErrorSurvient lorsqu’une opération invalide est effectuée sur une fibre (Fiber).
LogicExceptionReprésente les erreurs dans la logique du programme.
BadFunctionCallExceptionSurvient si une fonction de rappel n’existe pas ou si certains de ses arguments sont manquants.
BadMethodCallExceptionSurvient si une méthode de rappel n’existe pas ou si certains de ses arguments sont manquants.
DomainExceptionSurvient si une valeur n’adhère pas à un domaine de données défini et valide.
InvalidArgumentExceptionSurvient si un argument ne correspond pas au type attendu.
LengthExceptionSurvient si une taille est invalide.
OutOfRangeExceptionSurvient lorsqu’un index illégal est demandé. Elle représente les erreurs qui devraient être détectées au moment de la compilation.
RuntimeExceptionSurvient quand une erreur est rencontrée durant l’exécution.
OutOfBoundsExceptionSurvient quand une valeur n’est pas une clé valide. Elle représente les erreurs qui ne peuvent pas être détectées au moment de la compilation.
OverflowExceptionSurvient lors de l’ajout d’un élément à un conteneur plein.
RangeExceptionSurvient pour indiquer des erreurs d’intervalle lors de l’exécution du programme. Normalement, cela signifie qu’il y a une erreur arithmétique autre qu’un débordement. C’est l’équivalent en cours d’exécution de DomainException.
UnderflowExceptionSurvient lorsqu’une opération invalide est effectuée sur un conteneur vide, tel qu’une suppression d’élément.
UnexpectedValueExceptionSurvient si une valeur ne fait pas partie d’une liste de valeurs. Typiquement, elle survient lorsqu’une fonction appelle une autre fonction et attend que la valeur retournée soit d’un certain type ou d’une certaine valeur, sans inclure les erreurs relatives à l’arithmétique ou au buffer.

Source :

https://www.php.net