Il y a beaucoup de façons que vous pouvez faire face à cela, et franchement, aucun d'eux n'est intrinsèquement "droit".
Vous aurez à décider pour vous-même, quelle méthode est la plus "confortable" pour vous - c'est toujours une mater de préférences (bien qu'il existe certaines techniques que vous devriez éviter et pour de bonnes raisons).
Cela dépendra beaucoup de la façon dont vous partagez votre logique, cependant j'ai tendance à enfermer l'ensemble du code qui peut retourner des erreurs non fatales à l'intérieur d'une fonction, et d'utiliser une valeur de retour de ladite fonction pour indiquer qu'il y avait une erreur.
Pour les erreurs fatales , j'ai tendance à utiliser des exceptions (avec try-catch
blocs).
Maintenant, juste pour être clair:
- Une erreur non fatale est une erreur que vous pouvez récupérer à partir d' - ce qui signifie que même si quelque chose allait mal, il y a encore un peu de code qui peuvent être exécutées et générer quelques précieux de sortie. Par exemple, si vous voulez obtenir de l'heure actuelle à l'aide
NTP
protocole, mais le serveur ne répond pas, vous pouvez décider d'utiliser les locaux time
fonction et continue à afficher un certain précieuses données à l'utilisateur.
- Une erreur fatale est une erreur que vous ne seriez pas en mesure de récupérer à partir d' - ce qui signifie que quelque chose de mauvais s'est passé et la seule chose que vous pouvez faire est de dire à votre utilisateur que la page ne peut pas faire ce qu'il avait demandé. Par exemple si vous souhaitez récupérer des données à partir de votre base de données et a obtenu
SQL Exception
- il n'y a pas de données précieuses pour être affichés et vous pouvez en informer l'utilisateur de ce.
Des Erreurs Non Fatales (à l'aide de la fonction de retour)
Un bon exemple de l'utilisation de la fonction retourne comme un moyen de traiter avec les non-mortelles problèmes serait une fonction qui tente d'afficher le contenu d'un fichier sur la page quand ce n'est pas l'objectif principal de la page (par exemple vous avez une fonction qui affiche des badges, récupérées à partir d'un fichier texte, sur chaque page, je sais que c'est tiré par les cheveux, mais garder avec moi).
function getBadge($file){
$f = fopen($file,'r');
if(!$f){
return null;
}
.. do some processing ..
return $badges;
}
$badges = getBadges('badges.txt');
if(!$badges){
echo "Cannot display badges.";
} else {
echo $badges;
}
.. carry on doing whatever page should be doing ..
En fait, la fonction fopen
lui-même en est un exemple - , il sera de retour.
Retourne un pointeur de fichier de ressource en cas de succès, ou FALSE en cas d'erreur.
Fatal-Erreurs (à l'aide d'exceptions - try-catch)
Lorsque vous avez un morceau de code qui doit être exécuté parce que c'est exactement ce que l'utilisateur veut (par exemple la lecture de toutes les informations de la base de données et de les afficher à l'utilisateur), vous pouvez utiliser les exceptions. Prenons un exemple très simple, un utilisateur a visité son profil et je voulais voir tous les messages qu'il a (supposons, pour l'instant, ils sont stockés en clair). Vous pourriez avoir une fonction comme:
function getMessages($user){
$messages = array();
$f = fopen("messages_$user.txt","r");
if(!$f){
throw new Exception("Could not read messages!");
}
... do some processing ...
return $messages;
}
Et de l'utiliser comme ceci:
try{
..do some stuff..
$messages = getMessages($_SESSION['user'])); //assuming you store username in $_SESSION
foreach($messages as $msg){
echo $msg."<br/>";
}
} catch(Exception $e){
echo "Sorry, there was an error: ".$e->getMessage();
}
Maintenant, cela pourrait venir dans maniable, si vous aviez un "haut-niveau" script qui exécute tout le code des autres. Cela signifie que, par exemple, dans votre index.php
vous suffit:
try{
.. execute some code, perform some functions ..
} catch(Exception $e){
echo "Sorry, there was an error: ".$e->getMessage();
}
N'abusez pas des exceptions!
Quoi que vous fassiez, ne jamais utiliser les exceptions comme une façon de vérifier quelque chose, vous pouvez le récupérer à partir. À lire sur une autre question(crédit va à Anton Gogolev pour une très bonne explication sur ce, ainsi que d'autres réponse-ers) pourquoi c'est le cas.
Lectures complémentaires
Maintenant, il n'y a pas de meilleure façon d'apprendre à faire face avec des erreurs que d'essayer plusieurs choses et voir ce qui est bon pour vous. Vous pouvez trouver ci-dessous utiles:
Espérons que cela aide :)