Foire aux questions : ce que vous devez savoir des espaces de noms
Exceptions étendues
Référence du langage
PHP Manual

# Les exceptions

## Sommaire

- Exceptions étendues

PHP 5 a une gestion des exceptions similaire à ce qu'offrent les autres langages de programmation. Une exception peut être lancée ("throw") et attrapée ("catch") dans PHP. Le code devra être entouré d'un bloc try pour faciliter la saisie d'une exception potentielle. Chaque try doit avoir au moins un bloc catch correspondant. Plusieurs blocs catch peuvent être utilisés pour attraper différentes classes d'exceptions. L'exécution normale (lorsque aucune exception n'est lancée dans le bloc try ou lorsqu'un catch correspondant à l'exception lancée n'est pas présent) continue après le dernier bloc catch défini dans la séquence. Les exceptions peuvent être lancées (ou relancées) dans un bloc catch.

Lorsqu'une exception est jetée, le code suivant le traitement ne sera pas exécuté et PHP tentera de trouver le premier bloc catch correspondant. Si une exception n'est pas attrapé, une erreur fatale issue de PHP sera envoyée avec un message spécifiant que l'exception n'a pu être attrapée à moins qu'un gestionnaire ne soit défini avec la fonction set_exception_handler().

L'objet lancé doit être une instance de la classe Exception ou une sous-classe de la classe Exception. Tenter de lancer un objet qui ne correspond pas à cela résultera en une erreur fatale émise par PHP.

> Note: Les fonctions internes de PHP utilisent principalement l' Error reporting, seules les extensions orientées objet utilisent les exceptions. Quoiqu'il en soit, des erreurs peuvent facilement être traduites en exceptions avec ErrorException.

Astuce

La bibliothèque standard PHP (SPL) fournit un bon nombre d'exceptions en dur.

Exemple #12 Lancer une exception

`<?php
function inverse($x) {
if (!$x) {
throw new Exception('Division par zéro.');
}
else return 1/$x;
}
try {
echo inverse(5) . "\n";
echo inverse(0) . "\n";
} catch (Exception $e) {
echo 'Exception reçue : ', $e->getMessage(), "\n";
}
// Continue execution
echo 'Bonjour le monde !';
?>`

L'exemple ci-dessus va afficher :

    0.2
    Exception reçue : Division par zéro.
    Hello World

Exemple #13 Héritage d'une exception

`<?php
class MyException extends Exception { }
class Test {
public function testing() {
try {
try {
throw new MyException('foo!');
} catch (MyException $e) {
/* on la relance */
throw $e;
}
} catch (Exception $e) {
var_dump($e->getMessage());
}
}
}
$foo = new Test;
$foo->testing();
?>`

L'exemple ci-dessus va afficher :

    string(4) "foo!"

Foire aux questions : ce que vous devez savoir des espaces de noms
Exceptions étendues
Référence du langage
PHP Manual