За последние 24 часа нас посетил 17771 программист и 1622 робота. Сейчас ищут 1760 программистов ...

Безусловный переход

Тема в разделе "Вопросы от блондинок", создана пользователем Maxxx.!!!., 29 авг 2007.

Статус темы:
Закрыта.
  1. Maxxx.!!!.

    Maxxx.!!!. Активный пользователь

    С нами с:
    2 июл 2006
    Сообщения:
    56
    Симпатии:
    0
    А есть ли в PHP что-то вроде оператора GOTO, чтобы после выполнения, например, GOTO Run, он переходил на строку с меткой .Run? Я покопался в справочниках, но подобного не нашел...
     
  2. Veem

    Veem Активный пользователь

    С нами с:
    21 авг 2007
    Сообщения:
    76
    Симпатии:
    0
    Чем функции не устраивают?
     
  3. Maxxx.!!!.

    Maxxx.!!!. Активный пользователь

    С нами с:
    2 июл 2006
    Сообщения:
    56
    Симпатии:
    0
    Ну, если я правильно понимаю, если я вызову функцию в каком-то месте, то PHP выполнит ее содержимое, а потом опять ВЕРНЕТСЯ на место ее вызова. А мне надо, чтобы она не возвращалась (не знаю, как в PHP, а в QB, VB, DV, BB и пр. языках функции себя так и ведут).
     
  4. Veem

    Veem Активный пользователь

    С нами с:
    21 авг 2007
    Сообщения:
    76
    Симпатии:
    0
    Для этого вполне достаточно функций, условий и циклов.
    Например, вы можете вызвать функцию, а затем, исходя из значения, которое она вернет, пропустить ненужный для этого случая код при помощи условных операторов.
    В других случаях, естественно, возможны другие варианты реализации вашей задумки.

    А GOTO в нормальных языках отсутствует за ненадобностью и вредностью ;) (с)
     
  5. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    В PHP 6, вроде как, обещали добавить.
     
  6. Angerslave

    Angerslave Guest

    Угу, GOTO фтопку, ибо трудноотлавливаем, да и рекурсивный вызов функции с лихвой окупает отсутствие GOTO.
     
  7. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Можно впринципе циклом его эмулировать :)
    Код (Text):
    1. while (true) {
    2.     // тут код
    3.     if (!(условие_перехода)) {
    4.         break;
    5.     }
    6. }
     
  8. Maxxx.!!!.

    Maxxx.!!!. Активный пользователь

    С нами с:
    2 июл 2006
    Сообщения:
    56
    Симпатии:
    0
    Блин, это все идеология. GOTO очень легко реализовать, в насчет debug, то если в коде стоит 1-2 GOTO, то отловить что-нибудь будет не сложнее, чем десяток рекурсивных функций (а рекурсивные - это которые вызывают сами себя?).
    Ну все таки, как мне реализовать на PHP подобие этого кода:


    PHP:
    1.  
    2. if ($var==1) {
    3.  
    4. if (var1<>10) {GOTO .exitif}
    5.  
    6. echo $var;
    7. echo $var1;
    8.  
    9. .exitif
    10.                  }
    11.  
     
  9. Maxxx.!!!.

    Maxxx.!!!. Активный пользователь

    С нами с:
    2 июл 2006
    Сообщения:
    56
    Симпатии:
    0
    Да я пробовал с break - в моем случае это не канает :(
     
  10. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Тогда представь публике, свой случай.
     
  11. Maxxx.!!!.

    Maxxx.!!!. Активный пользователь

    С нами с:
    2 июл 2006
    Сообщения:
    56
    Симпатии:
    0
    Я его представлял в другой теме, но на него никто не обратил внимания (200 строчек кода). Но все же, я здесь выше выложил примерную ситуацию, может быть вы сможете, посмотрев на нее, найти замену всеми нелюбимому GOTO.
     
  12. Veem

    Veem Активный пользователь

    С нами с:
    21 авг 2007
    Сообщения:
    76
    Симпатии:
    0
    Что-то со мной не то, с третьей попытки это нормально написал...
    PHP:
    1. function function_if($var1)
    2. {
    3.  if($var1<>10)
    4.  {
    5.   return TRUE;
    6.  }
    7.  else
    8.  {
    9.   return FALSE;
    10.  }
    11. }
    12.  
    13. if($var)
    14. {
    15.  if(function_if($var1))
    16.  {
    17.   #тут ваш .exitif
    18. }
    19.  else
    20.  {
    21.   #а тут без него
    22. }
    23. }
     
  13. Maxxx.!!!.

    Maxxx.!!!. Активный пользователь

    С нами с:
    2 июл 2006
    Сообщения:
    56
    Симпатии:
    0
    Спасибо! Попробую применить. Но все же, насколько проще было бы с GOTO...
     
  14. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Код (Text):
    1. while (true) {
    2.     //
    3.     // тут весь твой код
    4.     //
    5.     if (условие_перехода) {
    6.         continue; // вот твой GOTO
    7.     } else {
    8.         break;
    9.     }
    10. }
     
  15. Maxxx.!!!.

    Maxxx.!!!. Активный пользователь

    С нами с:
    2 июл 2006
    Сообщения:
    56
    Симпатии:
    0
    Т.е.:

    Код (Text):
    1.  
    2. while ($var==1) {
    3.  
    4.   echo $var;
    5.  echo $var1;
    6.  
    7.     if ($var1<>10) {
    8.         continue; // вот твой GOTO
    9.     } else {
    10.         break;
    11.     }
    12. }

    при $var==1 и $var1<>10 я получу вывод на печать этих переменных, а при $var1=10, я этого не получу?
     
  16. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    да. только твой код зациклится, т.к. $var1 никогда не будет равным 10.
     
  17. Maxxx.!!!.

    Maxxx.!!!. Активный пользователь

    С нами с:
    2 июл 2006
    Сообщения:
    56
    Симпатии:
    0
    Спасибо, попробую применить это в своем случае...
    P.S. Но все таки, GoTo - forever! :p
     
  18. Maxxx.!!!.

    Maxxx.!!!. Активный пользователь

    С нами с:
    2 июл 2006
    Сообщения:
    56
    Симпатии:
    0
    Блин, так ведь это плохо?
     
  19. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Ну дак наверное :) ещё раз внимательно мой код изучи.
     
  20. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    Из семинаров по структурному программированию смутно помню фразу "GOTO протеворечит структурному программированию" что значит, если вы хотите писать помойку а не код, то используйте GOTO.
    Руки бы оторвать тому кто это сделает.
     
  21. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    vb даже в JAVA есть аналог goto. В PHP тоже вот пообещали http://www.corephp.co.uk/archives/19-Pr ... PHP-6.html
    Код (Text):
    1. label:
    2. // some code...
    3. break label;
    Тут тоже, где не пободя не стоит применять GOTO. Нужно с умом подходить к делу.
     
  22. host

    host Активный пользователь

    С нами с:
    20 июн 2007
    Сообщения:
    733
    Симпатии:
    3
    PHP:
    1. <?php
    2. if ($goto)
    3. {
    4. trash();
    5. }
    6. ?>
    PHP:
    1. <?php
    2.  
    3. if($php != true)
    4. {
    5. $c++;
    6. }
    7. ?>
    :)
     
  23. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    писал на с, с++, vb, php, perl и т.д.

    ни разу не пригодилось сия фича.
    что я делаю не так?
     
  24. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    а я никогда не встречался с жителями новой гвинеи... что я делаю не так?
     
  25. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    PHP:
    1. if ($var==1 && var1==10) {
    2.     echo $var;
    3.     echo $var1;
    4. }
     
Статус темы:
Закрыта.