Si je devais donner un seul argument en faveur des exceptions, je dirais : la trace.
Les exceptions permettent, lorsqu'on les attrape, d'avoir la trace de toutes les fonctions qui ont été appellées, une après l'autre, avec leurs arguments, la ligne et le fichier de chacune, etc... jusqu'à savoir très exactement ce qui a causé l'erreur.
A vrai dire je ne vois strictement aucun avantage à or die()... J'ai beau chercher, j'en connais pas. C'est plus long à écrire et à utiliser, on a moins de renseignements, on ne peut pas en faire "ce qu'on veux"...
Un autre intérêt des exceptions est la possibilité d'en gérer plusieurs simplement. Petit exemple en code pour comprendre. Imaginons une situation : nous avons une administration, avec des administrateurs qui ont différents droits. En or die(), ça donnerais à peu près ça : (J'utilise des classes pour simplifier le code)
Les exceptions permettent, lorsqu'on les attrape, d'avoir la trace de toutes les fonctions qui ont été appellées, une après l'autre, avec leurs arguments, la ligne et le fichier de chacune, etc... jusqu'à savoir très exactement ce qui a causé l'erreur.
A vrai dire je ne vois strictement aucun avantage à or die()... J'ai beau chercher, j'en connais pas. C'est plus long à écrire et à utiliser, on a moins de renseignements, on ne peut pas en faire "ce qu'on veux"...
Un autre intérêt des exceptions est la possibilité d'en gérer plusieurs simplement. Petit exemple en code pour comprendre. Imaginons une situation : nous avons une administration, avec des administrateurs qui ont différents droits. En or die(), ça donnerais à peu près ça : (J'utilise des classes pour simplifier le code)
Code PHP :
<?php
// Connexion de l'utilisateur
$utilisateur = new utilisateur;
$utilisateur->connecter() or die('Login ou mot de passe incorrect');
// Vérification des droits d'accéder à cette partie
$utilisateur->verifierDroits('administration') or die('Droits incorrects');
// Vérification des paramètres passés
$parametres->verifier() or die('Modification impossible');
// Execution de la requête SQL voulue
$db::query('UPDATE machin') or die('Requête impossible à executer');
?>
Soit trois or die(). Si on veux les personnaliser, ça nous fait quatre fonctions (une pour demander la connexion, une pour dire qu'on ne peux pas acceder, une pour les erreurs SQL, une pour les erreurs de paramètres). C'est lourd, surtout qu'il y a plein plein d'autres or die possible.
Maintenant, avec les exceptions, il y a un truc génial, c'est qu'on peut étendre la classe exception. Et c'est là qu'elle prenne encore plus d'envergure, parce que ça nous donne ça :
Code PHP :
<?php
try {
$utilisateur = new utilisateur;
if(!$utilisateur->connecter())
{
throw new AuthException('Impossible de se connecter');
}
// Vérification des droits d'accéder à cette partie
if(!$utilisateur->verifierDroits('administration'))
{
throw new AuthException('Droits insuffisants');
}
// Vérification des paramètres passés
if(!$parametres->verifier())
{
throw new ErreurException('Les paramètres sont incorrects.', $parametres);
}
// Execution de la requête SQL voulue
if(!$db::query('UPDATE machin'))
{
throw new ErreurException('La requête a échoué', 'UPDATE machin');
}
}
catch (ErreurException $e)
{
log::logErreur($e);
}
catch(AuthException $e)
{
header('location: login.php?message=' . $e->getMessage(), false, 401);
}
?>