А есть ли в PHP что-то вроде оператора GOTO, чтобы после выполнения, например, GOTO Run, он переходил на строку с меткой .Run? Я покопался в справочниках, но подобного не нашел...
Ну, если я правильно понимаю, если я вызову функцию в каком-то месте, то PHP выполнит ее содержимое, а потом опять ВЕРНЕТСЯ на место ее вызова. А мне надо, чтобы она не возвращалась (не знаю, как в PHP, а в QB, VB, DV, BB и пр. языках функции себя так и ведут).
Для этого вполне достаточно функций, условий и циклов. Например, вы можете вызвать функцию, а затем, исходя из значения, которое она вернет, пропустить ненужный для этого случая код при помощи условных операторов. В других случаях, естественно, возможны другие варианты реализации вашей задумки. А GOTO в нормальных языках отсутствует за ненадобностью и вредностью (с)
Угу, GOTO фтопку, ибо трудноотлавливаем, да и рекурсивный вызов функции с лихвой окупает отсутствие GOTO.
Можно впринципе циклом его эмулировать Код (Text): while (true) { // тут код if (!(условие_перехода)) { break; } }
Блин, это все идеология. GOTO очень легко реализовать, в насчет debug, то если в коде стоит 1-2 GOTO, то отловить что-нибудь будет не сложнее, чем десяток рекурсивных функций (а рекурсивные - это которые вызывают сами себя?). Ну все таки, как мне реализовать на PHP подобие этого кода: PHP: if ($var==1) { if (var1<>10) {GOTO .exitif} echo $var; echo $var1; .exitif }
Я его представлял в другой теме, но на него никто не обратил внимания (200 строчек кода). Но все же, я здесь выше выложил примерную ситуацию, может быть вы сможете, посмотрев на нее, найти замену всеми нелюбимому GOTO.
Что-то со мной не то, с третьей попытки это нормально написал... PHP: function function_if($var1) { if($var1<>10) { return TRUE; } else { return FALSE; } } if($var) { if(function_if($var1)) { #тут ваш .exitif } else { #а тут без него } }
Код (Text): while (true) { // // тут весь твой код // if (условие_перехода) { continue; // вот твой GOTO } else { break; } }
Т.е.: Код (Text): while ($var==1) { echo $var; echo $var1; if ($var1<>10) { continue; // вот твой GOTO } else { break; } } при $var==1 и $var1<>10 я получу вывод на печать этих переменных, а при $var1=10, я этого не получу?
Из семинаров по структурному программированию смутно помню фразу "GOTO протеворечит структурному программированию" что значит, если вы хотите писать помойку а не код, то используйте GOTO. Руки бы оторвать тому кто это сделает.
vb даже в JAVA есть аналог goto. В PHP тоже вот пообещали http://www.corephp.co.uk/archives/19-Pr ... PHP-6.html Код (Text): label: // some code... break label; Тут тоже, где не пободя не стоит применять GOTO. Нужно с умом подходить к делу.