2 votes

Meilleur modèle alternatif de traitement des exceptions

Malheureusement, j'ai un ancien système PHP4 auquel j'ai continuellement besoin d'ajouter des fonctionnalités. Il ne semble pas qu'il y aura des ressources pour faire un portage vers PHP5 avant plusieurs mois, voire plusieurs années. Au cours des dernières années, l'une des principales choses qui m'a gêné est de ne pas avoir la possibilité de lancer des exceptions proprement. A cause de cela, toutes sortes de codes de vérification d'erreurs doivent constamment interrompre le flux de ce qui se passe.

Venons-en donc à la question : Quelle est la meilleure stratégie que vous ayez vue pour émuler la propreté de la gestion des exceptions dans les langages qui n'ont pas de modèle d'exception ?

Joel a ceci à dire concernant les exceptions, comme indiqué dans une réponse :

http://www.joelonsoftware.com/items/2003/10/13.html

Ils créent trop de points de sortie possibles pour une fonction. Pour écrire un code correct, vous devez vraiment penser à tous les chemins de code possibles à travers votre fonction. Chaque fois que vous appelez une fonction qui peut lever une exception et que vous ne l'attrapez pas sur le champ, vous créez des opportunités de bogues surprises causés par des fonctions qui se terminent brusquement, laissant des données dans un état incohérent, ou d'autres chemins de code auxquels vous n'avez pas pensé.

Une meilleure alternative consiste à faire en sorte que vos fonctions renvoient des valeurs d'erreur lorsque les choses tournent mal, et à traiter ces erreurs de manière explicite, aussi verbeux que cela puisse être. Il est vrai que ce qui devrait être un simple programme de 3 lignes s'épanouit souvent en 48 lignes lorsque vous mettez en place un bon contrôle d'erreur, mais c'est la vie, et la recouvrir d'exceptions ne rend pas votre programme plus robuste. Je pense que la raison pour laquelle les programmeurs des langages de style C/C++/Java ont été attirés par les exceptions est simplement parce que la syntaxe n'a pas de moyen concis d'appeler une fonction qui renvoie plusieurs valeurs, il est donc difficile d'écrire une fonction qui soit produit une valeur de retour, soit renvoie une erreur.

Cependant, un bon modèle d'exception dans un langage fait en sorte que la fonction appelée spécifie qu'elle va en fait lever une exception. Cela implique qu'il y a exactement zéro endroit supplémentaire où la fonction peut sortir (le code renverrait simplement false au lieu de lancer une exception), mais il y a exactement 1 endroit supplémentaire où la fonction peut sortir... Le bloc catch de la fonction appelante. Toute personne peut écrire un code bâclé qui laisse toutes les exceptions remonter vers le haut pour être traitées par d'autres, mais cela ne veut pas dire que vous devrait enlever un outil qui peut être utilisé de manière propre et efficace.

En fait, toute fonction peut renvoyer une valeur qui est hors de portée des valeurs de retour attendues du code appelant. Un bon programmeur va traiter toutes les valeurs de retour possibles, y compris les codes d'erreur et les conditions. Le modèle d'exception lui donne simplement un moyen de le faire proprement.

3voto

Peter Bailey Points 62125

Tout d'abord, il y a des gens qui pensent que les exceptions ne sont pas le bon modèle d'erreur, notamment un des fondateurs de ce site .

Deuxièmement, vous devez essayer de faire l'inventaire des fonctions de gestion des erreurs disponibles pour votre version mineure de PHP. Ma réaction immédiate est de vous suggérer de passer du temps à écrire un bon gestionnaire d'erreurs, et d'utiliser les fonctions de gestion d'erreurs. l'enregistrer .

Ensuite, dans l'exécution de votre application, là où vous devriez normalement lancer des exceptions, vous pouvez à la place erreurs de déclenchement . Si vous avez de la chance, vous serez en mesure d'utiliser debug_backtrace() .

Bonne chance !

2voto

troelskn Points 51966

Style de passage de la continuité . En fait, j'oserais dire qu'il bat les exceptions en termes de "beauté". Ce n'est pas la chose la plus naturelle à intégrer dans PHP, mais vous pouvez le faire, en utilisant des objets et des modèles tels que visitor.

Mais en réalité, la mise à jour de PHP4 à PHP5 ne nécessite pas plus de quelques heures de travail - il y a une compatibilité ascendante.

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