PHP : les exceptions

Auteur·rice

Petit rappel de base sur les exceptions en PHP.

Base

La gestion d’exception en PHP se fait comme dans beaucoup de langages de la manière suivante :

try {
    throw new Exception('message for this exception');
} catch (Exception $e) {
    // somehow handle the error here
}

Exceptions personnalisées

La classe Exception peut être étendue pour définir nos propres exceptions

class CustomException extends Exception {}

Souvent, on utilisera un namespace pour éviter les conflits avec d’autres bibliothèques.

namespace MyApp\Exception;

class CustomException extends Exception {}

Usage :

throw new \MyApp\Exception\CustomException('message for this exception');

Exceptions SPL

La SPL (Standard PHP Library) propose des exceptions “génériques” un peu plus précises que Exception, permettant de catégoriser les erreurs sans avoir à déclarer ses propres exceptions ou à parser bêtement les messages d’exception.

Exception(s) Description
LogicException Erreur de logique dans le programme, un bug à corriger dans le code
  ↳ BadFunctionCallException
  ↳ BadMethodCallException
Erreur d’appel (fonction/méthode inexistante, ou appelée avec les mauvais paramètres).
  ↳ DomainException Valeur “hors domaine” (si la valeur d’un paramètre respecte le type de variable mais pas le domaine de valeurs autorisées)
  ↳ InvalidArgumentException Valeur ne respectant pas le type attendu
  ↳ LengthException Valeur ne respectant pas la longueur attendue (chaine de caractère essentiellement ?)
  ↳ OutOfRangeException Intermédiaire batard entre DomainException (logic) et OutOfBoundsException (runtime) ?
RuntimeException Erreur remontée à l’exécution
  ↳ OutOfBoundsException Appel à un index/clé (de tableau, par exemple) inexistant dans le contexte
  ↳ OverflowException Erreur à l’insertion d’un élément dans un conteneur plein
  ↳ RangeException Valeur “hors domaine” pour un domaine contextuel (spécifique à cette exécution)
  ↳ UnderflowException Erreur à l’utilisation d’un conteneur s’il est vide
  ↳ UnexpectedValueException Erreur au retour d’une fonction si la valeur de retour n’est pas gérée