Les erreurs Throwable

Une erreur Throwable est un événement d'exécution qui interrompt le flux normal des instructions. Lorsqu'une erreur Throwable est lancée par throw, elle dépile la pile d'appels jusqu'à être attrapée par un bloc catch ou jusqu'à atteindre la portée globale. Tous les blocs finally rencontrés en chemin sont exécutés. Une erreur Throwable non attrapée est transmise au gestionnaire d'exceptions défini avec set_exception_handler(), s'il y en a un ; sinon, le programme se termine avec une erreur fatale.

Pour lancer une erreur Throwable depuis du code PHP, utilisez le mot-clé throw.

Astuce

La bibliothèque standard PHP (SPL) fournit diverses exceptions natives. Il est également possible de créer des exceptions personnalisées en étendant la classe Exception.

Il est possible de traiter une erreur Throwable dans PHP en entourant le code susceptible de lancer une erreur d'un bloc try.

Avertissement

Les objets Throwable ne peuvent pas être clonés. Tenter de cloner un tel objet lance une erreur Error avec le message suivant : Trying to clone an uncloneable object of class ClassName. Cela se produit même si une sous-classe déclare sa propre méthode __clone(). Voir Exception::__clone() et Error::__clone().

Gestionnaire d'exceptions global

Il est possible d'ajouter un gestionnaire pour toute erreur Throwable non attrapée avec set_exception_handler(). Ceci est similaire à l'encapsulation de l'ensemble du code dans un bloc try-catch, à ceci près que l'exécution ne reprend pas ensuite : le script se termine une fois que le gestionnaire a retourné.

Étendre les exceptions

Une exception définie par l'utilisateur peut être créée en étendant la classe native Exception.

Si une classe étend la classe native Exception et redéfinit le constructeur, il est fortement recommandé qu'elle appelle aussi parent::__construct() afin de s'assurer que toutes les données disponibles ont été correctement assignées. La méthode __toString() peut être surchargée pour fournir une sortie personnalisée lorsque l'objet est utilisé comme une chaîne de caractères.

Exemple #1 Étendre la classe Exception

<?php
class CustomException extends Exception
{
    // Redéfinit le constructeur pour que le message ne soit pas optionnel
    public function __construct($message, $code = 0, ?Throwable $previous = null) {
        // du code

        // S'assure que tout est correctement assigné
        parent::__construct($message, $code, $previous);
    }

    // Représentation personnalisée de l'objet sous forme de chaîne
    public function __toString() {
        return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
    }

    public function customFunction() {
        echo "Une fonction personnalisée pour ce type d'exception\n";
    }
}

try {
    throw new CustomException("Quelque chose s'est produit", 5);
} catch (CustomException $e) {
    echo "Exception personnalisée attrapée\n", $e;
    $e->customFunction();
}

L'exemple ci-dessus va afficher :

Exception personnalisée attrapée
CustomException: [5]: Quelque chose s'est produit
Une fonction personnalisée pour ce type d'exception

Hiérarchie Throwable

La classe Exception possède de nombreuses sous-classes, parmi lesquelles les exceptions SPL et celles définies par les extensions.

+add a note

User Contributed Notes

There are no user contributed notes for this page.