8
votes

En utilisant un code pour une exception. Utile?

Je ne suis pas sûr que si des exceptions fonctionnent de la même manière dans chaque langue, mais j'utilise PHP et je me demandais quand je fais quelque chose comme ceci:

if (!$this->connection[0]->query($this->query))
 throw new QueryFailedException($this->connection[0]->error,123);


4 Réponses :


10
votes

Le code d'erreur est un champ pouvant être utilisé pour fournir des informations plus détaillées. Si par exemple, vous avez deux choses qui peuvent générer la même exception, le code pourrait être utilisé pour donner plus de détails.


0 commentaires

15
votes

Le code d'erreur était une fonctionnalité utilisée lorsqu'il n'y avait aucune langue orientée objet. La seule chose qui pourrait vous aider à comprendre ce qui s'est mal passé était le code d'erreur. Dans une langue orientée objet, l'objet est votre code d'erreur. À moins que, dans des cas spécifiques, plus d'une chose peut lancer exactement la même erreur et elles sont traitées de différentes manières, déposez-la. De plus, vous fourniriez une explication bien meilleure à qui que ce soit de déboguer votre code si vous avez laissé un message au lieu d'un code d'erreur sans signification, donc si vous avez besoin que l'exception nécessite plus d'informations, remplissez plutôt le champ Message d'erreur.


0 commentaires

4
votes

Si vous avez une "source d'erreur" qui fonctionne sur les codes d'erreur et que vous "promouvez" les exceptions, vous pouvez inclure le code d'erreur réel à l'exception. a) Il ne fait pas de mal et b) peut-être que vous ne voulez pas avoir une classe d'exception pour chaque code d'erreur unique pouvant ou non se produire (et pratiquement personne ne s'en soucie dans un système d'exécution).
Prenons le erreurs de serveur MySQL en tant que Exemple. Vous pouvez créer une classe pour chacun de ces codes xxx

mais en réalité ... qui se soucie? Qui va vraiment les attraper individuellement? Dans presque tous les cas, il n'y aura que de Catch (mysqlexception $ MEX) dans le code de l'application et peut-être, peut-être que c'est peut-être à la recherche d'un code spécifique où il n'aboutit que peu de différence pour le codeur s'il y a deux blocs de capture ou un bloc IF / Switch. Maintenant, vous avez beaucoup de classes "mortes" et personne -Except l'analyseur - me soucie d'eux. (D'autre part "Tout ce qui vaut la peine de faire, c'est la peine de trop le faire")
Et même si vous faites une certaine granularité, je pense que cela a peu de sens à aller au-delà de Par exemple. Avoir une classe d'exception pour chaque sqlstate (cela a du sens? SQLSTATE? Je ne sais pas, juste un exemple) xxx

et encore une fois, vous voulez probablement inclure le code d'erreur - Pourquoi perdre ces informations même si votre code généralement ne l'évalue pas?


0 commentaires

0
votes

Si vous le pouvez, il est très bon de définir un code d'exception. C'est si vous ne changez pas votre code pour lancer différentes exceptions en fonction des données que vous obtenez de votre base de données. Le code d'erreur, dans OOP est le nom de la classe d'exception elle-même, de sorte que vous puissiez interpréter chacun d'eux dans un seul Essayez code> mais avec plusieurs captures code> clauses.

try {
  // code here
} catch (AccessDeniedException $e) {
 // do something
} catch (Exception $e) {
  // do something else
}


0 commentaires