goto

(PHP 5 >= 5.3.0)

Что наихуджее может случиться, если используется goto ?
Изображение предоставлено » xkcd

Оператор goto используется для перехода в другую часть программы. Место, куда необходимо перейти указывается с помощью метки, за которой ставится двоеточие, после оператора goto указывается желаемая метка для перехода. Оператор не является неограниченным "goto". Целевая метка должна находиться в том же файле, в том же контексте. Имеется ввиду, что вы не можете ни перейти за границы функции или метода, ни перейти внутрь одной из них. Вы также не можете перейти внутрь любой циклической структуры или оператора switch. Но вы можете выйти из них, и обычным применением оператора goto является использование его вместо многоуровневых break.

Пример #1 Пример использования goto

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

Результат выполнения данного примера:

Bar

Пример #2 Пример использования 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';
?>

Результат выполнения данного примера:

j hit 17

Пример #3 Следующий пример работать не будет

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

Результат выполнения данного примера:

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

Замечание:

Оператор goto доступен в PHP начиная с версии 5.3.

Коментарии

Автор:
You should mention the label can't be a variable
2021-01-05 16:00:05
http://php5.kiev.ua/manual/ru/control-structures.goto.html
the problem of goto is that it is a good feature but in a large codebase it reduces the readability of the code . that's all . i try to not use it to think about the person who is going to read after me .
2022-02-03 20:58:56
http://php5.kiev.ua/manual/ru/control-structures.goto.html
Автор:
You can jump inside the same switch. This can be usefull to jump to default
<?php
$x
=3;
switch(
$x){
    case 
0:
    case 
3:
        print(
$x);   
        if(
$x)
            goto 
def;
    case 
5:
       
$x=6;
    default:
       
def:
        print(
$x);
}
?>
2022-09-28 14:37:07
http://php5.kiev.ua/manual/ru/control-structures.goto.html
Автор:
Example to exit loops:

for ($i = 0; $i < 10; $i++) {
    for ($j = 0; $j < 10; $j++) {
        if ($condition) {
            goto exit;
        }
    }
}
exit:
echo "Out of the loop.";
2023-09-07 23:28:16
http://php5.kiev.ua/manual/ru/control-structures.goto.html
You can use goto to hide large HTML blocks without using echo():

<html><body>

<?php if ($hide_form_and_script) { goto label_1;} ?>

<form action="" method="post">
<!-- some HTML here -->
</form>
<script>
let a='test'; // no need to escape nested quotes as with echo()
// some JavaScript here
</script>

<?php label_1?>

</body></html>
2024-07-22 15:21:40
http://php5.kiev.ua/manual/ru/control-structures.goto.html

    Поддержать сайт на родительском проекте КГБ