throw

(PHP 5, PHP 7, PHP 8)

Le mot-clĂ© throw est une expression et peut ĂȘtre utilisĂ© dans n'importe quel contexte d'expression. Il prend en argument un objet Throwable.

Attention

Antérieurement à PHP 8.0.0, le mot-clé throw était une instruction et non une expression.

Tenter de lancer avec throw un objet qui n'est pas Throwable lĂšve une erreur Error. Comme les classes utilisateur ne peuvent pas implĂ©menter directement Throwable, l'objet lancĂ© doit ĂȘtre une instance de Error ou de Exception, ou d'une sous-classe de l'une d'elles.

Exemple #1 Lancer un objet qui n'est pas Throwable

<?php
throw new class {};

Résultat de l'exemple ci-dessus est similaire à :

PHP Fatal error:  Uncaught Error: Cannot throw objects that do not implement Throwable in Command line code:1
Stack trace:
#0 {main}

AprĂšs l'utilisation de throw, le flux normal d'exĂ©cution est interrompu et la pile d'appels est dĂ©pilĂ©e jusqu'Ă  ce que l'objet soit attrapĂ© par un bloc catch ou que la portĂ©e globale soit atteinte. Tous les blocs finally rencontrĂ©s en chemin sont exĂ©cutĂ©s. Si la portĂ©e globale est atteinte, l'objet est transmis au gestionnaire d'exceptions dĂ©fini avec set_exception_handler(), s'il y en a un, et le script se termine une fois le gestionnaire terminĂ©. Sinon, le programme se termine avec une erreur fatale contenant la trace d'appels indiquant l'endroit oĂč l'objet Throwable a Ă©tĂ© lancĂ©.

Exemple #2 Lancer une exception dans la portée globale

<?php
echo "Avant l'exception\n";
throw new Exception("ArrĂȘt de l'exĂ©cution");
echo "AprĂšs l'exception\n";

Résultat de l'exemple ci-dessus est similaire à :

Avant l'exception
PHP Fatal error:  Uncaught Exception: ArrĂȘt de l'exĂ©cution in Command line code:2
Stack trace:
#0 {main}
  thrown in Command line code on line 2

Exemple #3 Lancer une exception dans une fonction

<?php

function foo() {
    echo "Avant l'exception\n";
    throw new Exception("ArrĂȘt de l'exĂ©cution");
    echo "AprĂšs l'exception\n";
}

foo();

Résultat de l'exemple ci-dessus est similaire à :

Avant l'exception
PHP Fatal error:  Uncaught Exception: ArrĂȘt de l'exĂ©cution in Command line code:3
Stack trace:
#0 Command line code(7): foo()
#1 {main}
  thrown in Command line code on line 3

Comme throw est une expression, il peut servir à bifurquer selon le résultat d'une autre expression si sa valeur est inappropriée.

Exemple #4 Utiliser throw comme une expression

Autorisé uniquement à partir de PHP 8.0.0.

<?php

function test() {
    do_something_risky() or throw new Exception("Ça n'a pas fonctionnĂ©");
}

function do_something_risky() {
    return false; // Simule un échec
}

try {
    test();
} catch (Exception $e) {
    print $e->getMessage();
}

L'exemple ci-dessus va afficher :

Ça n'a pas fonctionnĂ©

Il est possible de traiter un objet Throwable lancé en utilisant un bloc try-catch. Voir la section sur la gestion des erreurs pour plus d'informations.

add a note

User Contributed Notes

There are no user contributed notes for this page.