70 votes

GOTO est-il mauvais en PHP?

J'ai récemment découvert que PHP 5.3 supportait une nouvelle construction de langage appelée GOTO . Tout le monde sait ce qu'il fait. Cependant, ce n'est pas exactement le GOTO traditionnel, c'est juste une étiquette de saut. Je suis intéressant de savoir si ce GOTO est diabolique et implique un mauvais code?

143voto

Konamiman Points 20578

Sauf si vous programmez en assembleur, GOTO devrait toujours être traité de la même façon que le gilet de sauvetage des avions: il est bon de les avoir à disposition, mais si vous devez les utiliser, cela signifie que vous avez de gros problèmes.

103voto

Loris Points 828

Je ne peux pas croire que personne n'a posté ça :)

xkcd - goto

Certes, PHP n'est pas compilé ... Peut-être que le rapace vous poursuivra à chaque visite sur votre site Web?

78voto

Remo.D Points 9841

Une mauvaise structuration du code est néfaste, quelle que soit la structure de contrôle utilisée.

Personnellement, je préfère un goto qui indique clairement le flux du programme pour "contrôler les variables" et imbriqué "si", ce qui entraînera indirectement la même branche dans le code.

Donc, écrivez simplement les deux versions (avec et sans GOTO) et voyez laquelle est la plus facile à comprendre. Alors le choix est facile.

23voto

schmunk Points 2637

Je pense que c'est la partie la plus importante du PHP de la page de manuel et de manque ici:

Ce n'est pas complète sans restriction goto. L'étiquette cible doit être dans le même fichier et le contexte, ce qui signifie que vous ne pouvez pas sauter hors de fonction ou de méthode, et vous ne pouvez pas sauter dans un. Vous ne pouvez pas sauter dans n'importe quelle sorte de boucle ou de l'interrupteur de la structure. Vous pouvez sauter en dehors de ceux-ci, et une utilisation courante est d'utiliser un goto en place d'un multi-niveau de la rupture.

À mon humble avis cela le rend très différent de la ye olde style de BASE gotos.

18voto

AdamJonR Points 1

Je suis dans la minorité (pour l'instant), mais je crois que les restrictions à la mise sur PHP construction goto faire un très utile outil:

http://adamjonrichardson.com/2012/02/06/long-live-the-goto-statement/

J'ai fait marcher à travers un exemple de la flèche (code profondément imbriqués conditionnelles) et refactoriser le code en utilisant la norme de pratiques (garde des clauses, conditions de regroupement, tirant fonctions), dans une version et un goto version dans l'autre version, et je préfère aller à une base de refactoring.

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