(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.
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.