downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

Les fonctions> <include_once
[edit] Last updated: Wed, 09 May 2012

view this page in

goto

(PHP 5 >= 5.3.0)

L'opérateur goto peut être utilisé pour continuer l'exécution du script à un autre point du programme. La cible est spécifiée par un label, suivi de deux-point, et l'instruction goto est ensuite suivie de ce label. goto n'est pas totalement sans limitations. L'étiquette cible doit être dans le même contexte et fichier, ce qui signifie qu'il n'est pas possible de changer de méthode ou de fonction, ni de se rendre dans une autre fonction. Vous pouvez sortir d'une fonction, et l'utilisation courante est alors de se servir de goto comme un break.

Exemple #1 Exemple avec goto

<?php
goto a;
echo 
'Foo';
 
a:
echo 
'Bar';
?>

L'exemple ci-dessus va afficher :

Bar

Exemple #2 Exemple de boucle avec goto

<?php
for($i=0,$j=50$i<100$i++) {
  while(
$j--) {
    if(
$j==17) goto end
  }  
}
echo 
"i = $i";
end:
echo 
'j hit 17';
?>

L'exemple ci-dessus va afficher :

j hit 17

Exemple #3 Ce goto ne fonctionne pas

<?php
goto loop;
for(
$i=0,$j=50$i<100$i++) {
  while(
$j--) {
    
loop:
  }
}
echo 
"$i = $i";
?>

L'exemple ci-dessus va afficher :

Fatal error: 'goto' into loop or switch statement is disallowed in
script on line 2

Note:

L'opérateur goto est disponible depuis PHP 5.3.

Quelle est la chose la plus bizarre lors de l'utilisation de goto ?
Image gracieuseté de » xkcd



Les fonctions> <include_once
[edit] Last updated: Wed, 09 May 2012
 
add a note add a note User Contributed Notes goto
roman4work at gmail dot com 09-Apr-2012 03:36
since label executes all the time even if you don't use goto label;

<?php

if (false)
   goto
label

label
:
   echo
"label triggered";

?>

Will output: label triggered

I use labels like this

<?php

...some code...

if (
false) {
  
label1 :
      echo
"label 1 triggered";
}

if (
false) {

  
label2 :
      echo
"label 2 triggered";
}

if (
false) {

  
label3 :
      echo
"label 3 triggered";
}

?>

It will never output unless you use "goto <label>".
f at francislacroix dot info 30-Nov-2011 01:11
The goto operator CAN be evaluated with eval, provided the label is in the eval'd code:

<?php
a
: eval("goto a;"); // undefined label 'a'
eval("a: goto a;"); // works
?>

It's because PHP does not consider the eval'd code, containing the label, to be in the same "file" as the goto statement.
Ray dot Paseur at Gmail dot com 27-Oct-2011 06:59
You cannot implement a Fortran-style "computed GOTO" in PHP because the label cannot be a variable. See: http://en.wikipedia.org/wiki/Considered_harmful

<?php // RAY_goto.php
error_reporting(E_ALL);

// DEMONSTRATE THAT THE GOTO LABEL IS CASE-SENSITIVE

goto a;
echo
'Foo';
a: echo 'Bar';

goto
A;
echo
'Foo';
A: echo 'Baz';

// CAN THE GOTO LABEL BE A VARIABLE?

$a = 'abc';
goto
$a; // NOPE: PARSE ERROR
echo 'Foo';
abc: echo 'Boom';
?>
contact at xpertmailer dot com 07-Jul-2011 06:08
goto operator can NOT be evaluate with eval()
tweston at coldsteelstudios dot com 05-Oct-2010 08:12
In a challenge of myself for a college class I decided to use the goto to remove all while loops from my code. It was actually easy, and AS FAST as While loops.

<?PHP
$start
= microtime(true);
$i = 0;
StartOfLoop:
$i++;
if(
$i < 1000000) goto StartOfLoop;

echo
microtime(true) - $start.PHP_EOL;

$start = microtime(true);
$i = 0;
while(
$i < 1000000){
   
$i++;
}

echo
microtime(true) - $start.PHP_EOL;
?>
chrisstocktonaz at gmail dot com 07-Aug-2009 03:03
Remember if you are not a fan of wild labels hanging around you are free to use braces in this construct creating a slightly cleaner look. Labels also are always executed and do not need to be called to have their associated code block ran. A purposeless example is below.

<?php

$headers
= Array('subject', 'bcc', 'to', 'cc', 'date', 'sender');
$position = 0;

hIterator: {

   
$c = 0;
    echo
$headers[$position] . PHP_EOL;

   
cIterator: {
        echo
' ' . $headers[$position][$c] . PHP_EOL;

        if(!isset(
$headers[$position][++$c])) {
            goto
cIteratorExit;
        }
        goto
cIterator;
    }

   
cIteratorExit: {
        if(isset(
$headers[++$position])) {
            goto
hIterator;
        }
    }
}
?>

 
show source | credits | sitemap | contact | advertising | mirror sites