7
votes

Codes d'erreur systématisation pour une application Web à PHP?

Je travaille sur une application Web PHP basée sur la classe. J'ai des endroits où des objets interagissent et j'ai certaines situations où j'utilise les codes d'erreur pour communiquer à l'utilisateur final - généralement lorsque les valeurs de formulaire sont manquantes ou invalides. Ce sont des situations où les exceptions sont injustifiées (et je ne suis pas sûr de pouvoir éviter les situations avec des exceptions de toute façon).

Dans un objet, j'ai quelques numéros de code, chacun correspondant à un message à l'utilisateur et à un message d'administrateur / développeur, de sorte que les deux parties savent ce qui se passe. Maintenant que j'ai travaillé sur le code plusieurs fois, je trouve qu'il est difficile de déterminer rapidement quels numéros de code dans la série que j'ai déjà utilisés, donc je crée accidentellement des numéros de code contradictoires. Par exemple, je viens de le faire aujourd'hui avec 12, 13, 14 et 15.

Comment puis-je mieux organiser cela, donc je ne crée pas de codes d'erreur contradictoires? Devrais-je créer une classe Singleton, code d'erreur, qui possède une liste principale de tous les codes d'erreur pour toutes les classes, les systématiser dans l'ensemble de l'application Web? Ou chaque objet doit-il avoir son propre ensemble de codes d'erreur, le cas échéant, et je tiens simplement une liste dans le commentaire de l'objet, d'utiliser et de mettre à jour cela comme je vais le long?


Edit: Donc, j'aime bien les suggestions d'utiliser des constantes ou des constantes nommées au sein de la classe. Cela me donne un seul endroit où je définis et gardez de manière programmative les codes d'erreur et leurs messages.

La question suivante: quel type d'interface dois-je fournir au monde extérieur pour les codes d'erreur et les messages d'erreur de cette classe? Est-ce que je fais quelque chose comme trygerError (20) dans la classe, puis fournissez une méthode publique pour renvoyer le code d'erreur, la constante de chaîne et le message d'utilisateur et d'administration?


0 commentaires

4 Réponses :


8
votes

Vous pouvez créer un couple de définit code> pour créer nommé Constantes forte> Pour tous vos codes d'erreur: xxx pré>

et, alors, utilisez les constantes de votre code: p> xxx pré>

Avec cela, nulle part dans votre code, vous utiliserez la valeur numérique: partout (sauf dans le fichier activé et unique dans lequel vous mettez le définir code> s) em>, vous utiliserez les codes. P>

Cela signifie: p>

  • moins de risque d'erreurs, car toutes les valeurs numériques sont définies dans un seul fichier li>
  • moins de risques d'erreurs, comme vous utiliserez les constantes, qui ont un nom qui indique ce que signifie li>
  • et code qui est plus facile à lire. LI> ul>


    Une autre idée pourrait être de créer une classe à traiter des erreurs: p> xxx pré>

    et, alors, utilisez quelque chose comme ceci: p>

    if ($errorCode == Error::CODE_SQL_QUERY) {
        // deal with SQL errors
    }
    


2 commentaires

C'est une bonne idée. J'aime bien coder les chiffres avec Certains type de message de chaîne indiquant ce qu'ils veulent dire. Donc, la prochaine étape: Comment fournir une interface au monde extérieur pour les erreurs? Un objet utilisant l'objet déclenché par erreur obtient la chaîne, le code d'erreur ou quoi?


@ user151841: Il me semble que vous pouvez faire ce que vous voulez avec un code d'erreur donné. Personnellement, j'utiliserais des exceptions pour cela, mais cela semble être en dehors de ce que vous recherchez.



1
votes

à tout le moins, pouvez-vous heurter les numéros de code pour être des constantes ou des membres de la classe?

MyErrorProneClass::TURNED_INTO_A_NEWT


1 commentaires

Joe, j'aime l'idée d'utiliser des constantes dans la classe. Comment fournir une interface de la classe au monde extérieur pour ces constantes et valeurs? Je souhaite également les associer à une table des chaînes de message d'erreur d'utilisateur et d'administration. En outre, qu'est-ce qu'un "membre" de classe?



0
votes

Si vous ne savez pas déjà, il pourrait être une idée d'utiliser Trigger_Error (), plus un gestionnaire d'erreur si vous souhaitez présenter l'utilisateur un meilleur message d'erreur.


1 commentaires

Oui, mais c'est comme si les "exceptions d'utilisation" répondent - je dois toujours organiser mes codes d'erreur et mes cordes comme je travaille. Il vient de déplacer le problème.



0
votes

Avez-vous pensé à utiliser Exceptions ? Ils peuvent être un bon choix pour votre problème ici, même si les ajoutant à votre projet nécessiteraient probablement une certaine restructuration.

Vous pouvez étendre la classe d'exception de base afin qu'elle correspond à votre problème en termes de séparation des messages d'erreur utilisateur / développeur.


1 commentaires

Ouais, eh bien, avec des exceptions, j'ai toujours le problème d'organiser les codes d'erreur et de les garder tout droit. Cela vient de déplacer le problème, ne le résout pas.