PHP 5.3 – L’instruction goto
PHP dans sa version 5.3 integrera l’instruction goto.

Même si le GOTO fait indéniablement penser au COBOL et ses assiettes de code spaghetti, il est des situation ou cette instruction est bien utile.
Pour court-circuiter du code selon un test par exemple. Imaginons une fonction avec une suite de tests à effectuer, des qu’un test est ok, on crée un log et on sort de la fonction. On aurait donc:
<?php function mesTest() { if(test1) { //malheureusement //le code pour créer la ligne de log //prend plusieurs lignes return false; } if(test2) { //malheureusement //le code pour créer la ligne de log //prend plusieurs lignes return false; } if(test3) { //malheureusement //le code pour créer la ligne de log //prend plusieurs lignes return false; } return true; } ?> |
Avec goto, on aura
<?php function mesTest() { if(test1){ $err = ‘erreur 1 ‘; goto erreur; } if(test1){ $err = ‘erreur 1 ‘; goto erreur; } if(test1){ $err = ‘erreur 1 ‘; goto erreur; } return true; erreur: //le code pour créer la ligne de log //en se servant de $err //qui prend plusieurs lignes return false; } ?> |
Evidement ça n’est pas le meilleurs exemple puisque d’aucun aurait écrit:
<?php function mesTest() { $err = ''; if(test1) { $err = 'erreur 1'; } if(test2) { $err = 'erreur 1'; } if(test3) { $err = 'erreur 1'; } if($err != '') { //le code pour créer la ligne de log //qui prend plusieurs lignes return false; } else { return true; } } ?> |
Ou encore:
<?php function mesTest() { $err = ''; if(test1) { return log('erreur 1'); } if(test2) { return log('erreur 2'); } if(test3) { return log('erreur 3'); } return true; } function log() { //le code pour créer la ligne de log //qui prend plusieurs lignes return false; } ?> |
Vous trouverez bien des occasions où goto vous facilitera la vie, en étant bien plus utile que dans mon exemple dont le seul but était de présenter l’instruction, attention toutefois à ne pas créer un code jeu de piste allant de goto en goto.

Benoa
3 sept, 2009
Personnellement je n’utiliserai jamais cette technique. Même si c’est vrai que ça peut être pratique, ça ne me viendrait pas à l’esprit de construire une logique comme celle-ci. Le dernier exemple me semble être la meilleure méthode. Sauf qu’il faut définir log() avant de l’appeler
J’avais vu quelque part un exemple où goto prenait comme indicateur le numéro de ligne où se rendre…
didine
10 déc, 2009
lol non c’est pas obliger de la déclarer avant de l’appeler, sauf si tu travaille pas avec les classes