PHP 5.3 : L'arrivée de la structure de contrôle goto
Par Méthylbro le dimanche 27 septembre 2009, 08:00 - Développement - Lien permanent
Sur un point, PHP 5.3 me rend nostalgique. En effet l'arrivé de la structure de contrôle goto me rappelle l'époque du lycée, ou je passais mes cours de maths à programmer tout plein de trucs sur ma calculatrice avec ce pseudo Basic qu'est le TI-Basic.
Nous voilà donc désormais possible d'utiliser ce genre de structures dans nos scripts PHP. C'est fun et pas trop « usefull » selon moi, mais cela me donne un sujet pour un petit billet.
Pour commencer, voyons comment utiliser un goto avec PHP >=5.3. L'opérateur goto permet de demander à se déplacer dans le script. Que cela soit vers l'avant, ou vers l'arrière.
Cependant comme vous le savez, pour ce déplacer dans un espace bi-dimensionnel il faut un point de départ et un point d'arrivé. L'instruction goto nous servira de point de départ. Nous devrons ensuite disposer un « label », une étiquette qui nous servira de point d'arriver.
Prenons un premier exemple simple ; qui va faire un retour en arrière une fois pour réécrire « bonjour » :
$flag = false;
label:
echo "bonjour !\n";
if (!$flag) {
$flag = true;
goto label;
}
L'exemple suivant retournera :
bonjour !\n
bonjour !\n
Si vous considérer cela comme inutile, je suis un peu d'accord avec vous. Je fais partie de ceux qui ne comprennent pas pourquoi avoir implémenté ceci dans PHP à l'aire du tout objet. Il serait facile, voire plus correct d'utiliser des fonctions ou des méthodes pour réaliser ce genre de cas.
Je ne vois pas d'application pratique réellement intéressante à l'utilisation de cette nouvelle structure de contrôle. De plus le danger dans l'utilisation de goto est de rendre à termes les scripts potentiellement illisibles et difficiles à maintenir.
En conclusion, jouer avec goto c'est marrant, ça fait très rétro et c'est emplein de nostalgie mais c'est dangereux, pas beau et tout vilain.

Commentaires
J'avoue ne pas comprendre l'intérêt d'ajouter un opérateur qui est globalement considéré comme dangereux...
Le seul intérêt de goto, c'est de pouvoir arrêter certaines boucles en évitant de faire des milliers de tests. Mais si ça permet une légère optimisation (du moins, dans des langages comme le C, je sais pas si c'est aussi vrai en PHP), ça reste moche, source de problèmes et assez dur à déboguer...
@Adrian : même pas. Si tu veux arrêter une boucle, c'est break que tu doit utiliser. Et break existe depuis toujours en PHP. Le seul intérêt de goto c'est de pouvoir se déplacer à l'exécution.
Pour un debbugage...à la tronçonneuse...
Mouai, je ne vois pas non plus l'intérêt du goto en PHP ... C'est dangereux, c'est moche et il y a mieux pour structurer son code !
Ils devaient s'ennuyer donc ils l'ont implémenté ...
Son principal (et seul?) intérêt réside dans un enchevêtrement de boucles.
Goto, à la différence de break, permet de sortir en indiquant d'où il vient, grâce à son label.
Mais on est d'accord c'est limité :D