Les Exceptions

Définition

Les Exceptions servent à gérer les erreurs de façon "objet".
Jusqu'à présent, lorsqu'une erreur survenait, il suffisait de la retourner et de la stocker dans une variable. Cependant, avec l'arrivée des objets, cela ne va plus être possible aussi simplement qu'avant.
PHP a donc implémenté la gestion des exceptions pour gérer les messages d'erreurs liés aux objets.
PHP 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.
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.

try

Le bloc try permet d'essayer une action, si l'action réussie, le code continuera après la fin du bloc catch, mais dès la première exception, le bloc catch sera exécuté.
Il permet d'exécuter plusieurs actions qui peuvent lever une erreur tout en s'arrêtant à la première erreur levée.
try
{
	// quelque chose qui peut lancer une erreur
	// quelque chose qui peut lancer une erreur
	// quelque chose qui peut lancer une erreur
}

catch

Plusieurs blocs catch peuvent être utilisés pour attraper différentes classes d'exceptions. L'exécution normale (lorsqu'aucune exception n'est lancée dans le bloc try) 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 lancé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ée, une erreur fatale issue de PHP sera envoyée avec un message "Uncaught Exception ..." indiquant que l'exception n'a pu être attrapée à moins qu'un gestionnaire d'exceptions ne soit défini avec la fonction set_exception_handler().
catch (Exception $exception)
{
	// Une erreur a été attrapée
	// Le message d'erreur se trouve dans la variable $exception
	// $exception est une instance de la classe Exception
	// Nous avons donc accès aux méthodes et propriétés publiques de cette classe
	// Mais la principale est :
	$error = $exception->getMessage();
}

throw

Le mot clef throw permet de lancer une exception manuellement
Par exemple :
throw new Exception("Une erreur lancée manuellement");
Ce code va lancer une exception, qui, si elle n'est pas interceptée par un bloc try/catch, s'affichera à l'écran de l'utilisateur de façon impromptue et non maitrisée.
Vous pouvez bien entendu modifier le message d'erreur à l'intérieur de l'exception levée.

Exemple

En associant les blocs try et catch, ainsi que le lancé d'exception nous obtenons le code suivant :
$error = '';
try
{
	throw new Exception("Une erreur lancée manuellement");
}
catch (Exception $exception)
{
	$error = $exception->getMessage();
}
if ($error !== '')
{
	echo $error;
}