Народные умельцы написали патч для пхп 5.3.0 позволяюший пользоваться «goto» с небольшими ограничениями.
Пример кода:
< ?php
$countdownCounter = 10;
L1:
if ($countdownCounter == 0) {
jump L2;
}
else {
$countdownCounter--;
jump L1;
}
L2:
echo 'Countdown is finished!';
?>
Спрашивается а оно нам надо?
Довольно большое обсуждение по теме здесь.
Удивляет, что народ в большинстве ЗА.
может я чего-то не понимаю?
Когда-то давно, когда только переходил на пыху была такая нужда… но сейчас ИМХО не имеет смысла…
Приведенный пример с помощью оператора цикла «for» куда красивее решается, нежели GOTO/JUMP.
Миш, а как ты из двойного (или больше) цикла выходить будешь? В этом случае goto очень помогает. Сейчас же такой трюк решается двумя способами:
1. вынесением цикла в отдельную функцию и вызовом в средине операторa return. Способ довольно неудобный – если у меня тройной цикл и я хочу прервать два верхних – мне только их прийдется выносить в отдельную функцию + функций непонятных плодится много.
2. Работой с флагами:
for {for {
flag = false;
for {
if(bla) { flag = true; break; }
}
if(flag) break;
}
}
Оба способа «выдуманы» потому, что иногда «нужно», а «не получается». Оба способа не наглядны и не показывают, чего мы реально добиваемся. С goto подобные проблемы решаются гораздо изящнее.
Другое дело, что злоупотребление оператором goto может привести к еще более хреновому коду.
Для меня введение goto – скорее маленький плюсик языку PHP, чем недостаток.
PS. Тем, кто пишет такой код, как в посте – руки просто отрывать нужно и всё.
А while(0) уже отменили ?
Я в принципе согласен, что некоторые вещи с goto делать проще, но
всё-же можно реализовать и без него.
На самом деле плохого конечно вроде бы ничего и нет но,с учётом того что сейчас на пхп пишут все кому не лень, количество корявого кода увеличится на хз знает сколко, то есть пользы, на мой взгляд, будет меньше чем вреда.
Вообще-то в 5.3 расширили break до такого вида
for {
for {
if (something){
break 2;
}
}
}
Выйдет из обоих циклов сразу.
goto очень удобен для выпрыгивания из глубоко вложенных циклов или if-ов. Пользоваться или нет – дело вкуса, но лучше, чтобы такая возможность была.
а чем лучше то?
как я уже говорил – тот факт, что каждый прочитавший «php за 24 часа» начнёт его использовать в своих поделках, на мой взгляд, все плюсы его введения легко перевешивает.