80 votes

Quel est l'avantage d'utiliser try {} catch {} par rapport à if {} else {}

Je passe de mysql ordinaire en php à PDO et j'ai remarqué que la façon courante de tester les erreurs consiste à utiliser une combinaison try / catch au lieu de combinaisons if / else.

Quel est l'avantage de cette méthode, puis-je utiliser un bloc try / catch au lieu de plusieurs blocs if / else imbriqués pour gérer toutes les erreurs pour les différentes étapes (connexion, préparation, exécution, etc.)?

85voto

tvanfosson Points 268301

J'aimerais utiliser le bloc try/catch lorsque la voie normale par le code devrait aller sans erreur, sauf si il y a vraiment certaines conditions exceptionnelles-comme le serveur vers le bas, vos informations de connexion a expiré ou incorrect. Je n'aurais pas forcément l'utiliser pour gérer les non-exceptionnel erreurs -- dire comme l'utilisateur actuel n'étant pas dans le bon rôle. C'est que, quand on peut raisonnablement s'attendre et gérer une erreur qui n'est pas un état exceptionnel, je pense que vous devriez faire vos vérifications.

Dans le cas que vous avez décrit -- montage et l'exécution d'une requête, un bloc try/catch est une excellente façon de le gérer comme vous le faites normalement s'attendre à la requête de réussir. D'autre part, vous aurez probablement envie de vérifier que le contenu de résultat sont ce à quoi vous attendre avec contrôle logique de flux plutôt que de simplement tenter d'utiliser les données qui peuvent ne pas être valide pour votre but.

Une chose que vous voulez regarder dehors pour est bâclée utilisation de try/catch. Try/catch ne doit pas être utilisé pour vous protéger de la mauvaise programmation -- le "je ne sais pas ce qui va se passer si je fais cela, alors je vais l'envelopper dans un try/catch et espérer pour le mieux" de la programmation. En général, vous aurez envie de restreindre les types d'exceptions vous rattraper pour ceux qui ne sont pas liées au code lui-même (panne de serveur informations d'identification incorrectes, etc.) de sorte que vous pouvez trouver et corriger les erreurs qui sont liées code (pointeurs null, etc.).

16voto

Perchik Points 1118

En général, les blocs try-catch sont excellents car ils se cassent (se déplacent vers l'instruction catch) chaque fois que l'exception se produit. Les blocs If-else comptent sur vous pour prédire quand l'erreur se produira.

Edit: De plus, les blocs catch n'empêcheront pas votre code de s'arrêter lorsqu'une erreur est rencontrée.

13voto

Alan Storm Points 82442

L'avantage de try/catch, et les exceptions en général, est plus pour le peuple développement des bibliothèques comme la PDO. Ils permettent à un développeur de système pour gérer les situations undefined ou des résultats inattendus dans un moyen facile et rapide. Prendre une connexion de base de données. Ce devrait d'un système de faire si la base de données ne peut pas être atteint. Faut-il arrêter l'exécution? Essayer de nouveau? Lancer un avertissement et continuer? Le développeur du système ne peut pas savoir ce que vous en aurez besoin pour le faire, ils lèvent une exception, que vous aurez plus tard attraper et à manipuler.

L'avantage pour vous, en tant que consommateur du système plutôt que d'obtenir une vague d'erreur de code, ou un simple booléen faux qu'il a échoué, vous obtenez un objet d'Exception qui

  1. Être nommé dans une telle manière qu'il est plus évident de ce qui s'est passé (Si je me souviens bien, PDO n'a qu'un seul type d'Exception, mais d'autres systèmes de contenir plusieurs types d'exceptions pour les différents types d'erreurs)

  2. Peut/doit contenir des méthodes et des propriétés qui peuvent vous aider à comprendre pourquoi la levée de l'exception

C'est la théorie, de toute façon. Il y a beaucoup de gens intelligents qui prétendent Exceptions sont la voie à suivre. Il ya aussi beaucoup de gens intelligents qui pensent que les Exceptions sont le diable, et d'une béquille pour les paresseux développeurs du système. Il n'y a rien qui ressemble à un consensus sur cette question.

8voto

Trap Points 4042

Try / Catch sépare totalement la logique de gestion des erreurs de la logique métier de l'objet.

4voto

Shaun Humphries Points 971

C'est exactement l'avantage, en utilisant une instruction try / catch au lieu de plusieurs instructions if. Vous pourrez également détecter toute erreur imprévue.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X