PHP - Exceptions

L'interface Throwable

En PHP, les exceptions sont des objets qui représentent des conditions exceptionnelles. Elles sont lancées lorsqu'une erreur spécifique se produit dans votre code. PHP fournit l'interface Throwable, qui est la classe de base pour toutes les exceptions et erreurs. Elle possesses plusieurs méthodes qui vous permettent de gérer les exceptions efficacement.

PHP - Exceptions

Gestion de base des exceptions

Pour gérer les exceptions en PHP, vous pouvez utiliser le bloc try-catch. Voici un exemple :

<?php
try {
// Code qui pourrait lancer une exception
throw new Exception("Une erreur s'est produite !");
} catch (Exception $e) {
// Code pour gérer l'exception
echo "Exception capturée : " . $e->getMessage();
}
?>

Dans cet exemple, nous utilisons l'instruction throw pour créer un nouvel objet Exception avec un message personnalisé. Si une exception est lancée à l'intérieur du bloc try, l'exécution du code passe au bloc catch correspondant, où l'exception est capturée et traitée.

set_exception_handler

La fonction set_exception_handler vous permet de définir une fonction personnalisée qui sera appelée chaque fois qu'une exception non capturée est lancée. Cette fonction doit prendre deux paramètres : l'objet exception et un booléen indiquant si l'exception a été lancée pendant un appel à eval().

Voici un exemple de l'utilisation de set_exception_handler :

<?php
function myExceptionHandler($exception) {
echo "Exception non capturée : " . $exception->getMessage();
}

set_exception_handler('myExceptionHandler');

// Code qui lance une exception
throw new Exception("Oups ! Quelque chose s'est mal passé.");
?>

Dans cet exemple, nous définissons une fonction de gestionnaire d'exceptions personnalisée appelée myExceptionHandler. Nous utilisons ensuite set_exception_handler pour définir cette fonction comme gestionnaire d'exceptions par défaut. Lorsqu'une exception non capturée est lancée, notre fonction personnalisée sera appelée au lieu de la fonction par défaut.

Exceptions SPL

PHP fournit plusieurs classes d'exceptions intégrées dans la Bibliothèque PHP Standard (SPL). Ces classes étendent la classe Exception et fournissent des informations plus spécifiques sur différents types d'exceptions. Certaines exceptions SPL courantes incluent :

  • BadFunctionCallException : Lancée lorsque le callback fait référence à une fonction non définie ou si certains arguments sont manquants.
  • DomainException : Utilisée pour les erreurs dans la logique du domaine de votre application.
  • InvalidArgumentException : Levée lorsque une fonction reçoit un argument qu'elle n'accepte pas.
  • LengthException : Utilisée lorsque une opération tente d'utiliser un objet de longueur incorrecte.
  • OutOfBoundsException : Lancée lorsque un index de tableau est hors limites.
  • OutOfRangeException : Levée lorsque une valeur n'est pas dans la plage attendue.
  • RangeException : Utilisée lorsque une valeur n'est pas dans la plage spécifiée.
  • RuntimeException : Exception à usage général pour les erreurs d'exécution.
  • UnderflowException : Lancée lorsque un dépassement de capacité se produit (par exemple, soustraire d'une pile vide).
  • UnexpectedValueException : Levée lorsque une valeur ne correspond pas au type attendu.

Vous pouvez utiliser ces exceptions SPL dans votre code comme n'importe quelle autre classe d'exception. Par exemple :

<?php
function divide($a, $b) {
if ($b == 0) {
throw new DivisionByZeroError("La division par zéro n'est pas permise.");
}
return $a / $b;
}

try {
echo divide(10, 0);
} catch (DivisionByZeroError $e) {
echo "Exception capturée : " . $e->getMessage();
}
?>

Exceptions personnalisées

En plus d'utiliser les exceptions SPL intégrées, vous pouvez également créer vos propres classes d'exceptions personnalisées. Pour ce faire, il suffit d'étendre la classe Exception et d'ajouter toute fonctionnalité supplémentaire dont vous avez besoin. Voici un exemple :

<?php
class MyCustomException extends Exception {
public function __construct($message, $code = 0, Exception $previous = null) {
parent::__construct($message, $code, $previous);
}
}

try {
throw new MyCustomException("Ceci est une exception personnalisée.");
} catch (MyCustomException $e) {
echo "Exception personnalisée capturée : " . $e->getMessage();
}
?>

Dans cet exemple, nous créons une nouvelle classe appelée MyCustomException qui étend la classe Exception. Nous lançons et capturons une instance de cette exception personnalisée comme nous le ferions avec n'importe quelle autre exception.

En suivant ces directives et en utilisant les outils fournis, vous pouvez gérer efficacement les exceptions dans votre code PHP et assurer que vos applications sont robustes et résilientes face aux erreurs imprévues. Souvenez-vous toujours de tester votre code en profondeur et de gérer les exceptions avec grâce pour offrir une meilleure expérience utilisateur.

Credits: Image by storyset