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
└── RequestParseBodyExceptionUsage
| Exception / Error | Description cas d’usage |
|---|---|
| Error | Classe de base pour toutes les erreurs internes de PHP. |
| ArithmeticError | Survient quand une erreur se produit lors d’une opération mathématique. |
| DivisionByZeroError | Survient quand un nombre essaye d’être divisé par zéro. |
| AssertionError | Survient quand une assertion faite avec assert() échoue. |
| CompileError | Survient quand une erreur de compilation se produit. |
| ParseError | Survient quand une erreur se produit lors de l’analyse de code PHP. |
| TypeError | Survient 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. |
| ArgumentCountError | Survient quand trop ou trop peu d’arguments sont passés à une fonction. |
| ValueError | Survient 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. |
| UnhandledMatchError | Survient lorsque le sujet transmis à une expression match n’est traité par aucun cas de cette même expression. |
| FiberError | Survient lorsqu’une opération invalide est effectuée sur une fibre (Fiber). |
| LogicException | Représente les erreurs dans la logique du programme. |
| BadFunctionCallException | Survient si une fonction de rappel n’existe pas ou si certains de ses arguments sont manquants. |
| BadMethodCallException | Survient si une méthode de rappel n’existe pas ou si certains de ses arguments sont manquants. |
| DomainException | Survient si une valeur n’adhère pas à un domaine de données défini et valide. |
| InvalidArgumentException | Survient si un argument ne correspond pas au type attendu. |
| LengthException | Survient si une taille est invalide. |
| OutOfRangeException | Survient lorsqu’un index illégal est demandé. Elle représente les erreurs qui devraient être détectées au moment de la compilation. |
| RuntimeException | Survient quand une erreur est rencontrée durant l’exécution. |
| OutOfBoundsException | Survient 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. |
| OverflowException | Survient lors de l’ajout d’un élément à un conteneur plein. |
| RangeException | Survient 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. |
| UnderflowException | Survient lorsqu’une opération invalide est effectuée sur un conteneur vide, tel qu’une suppression d’élément. |
| UnexpectedValueException | Survient 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