[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Что значит "while($j--)"?
alex455
<?php
for($i=0,$j=50; $i<100; $i++) {
while($j--) {
if($j==17) goto end;
}
}

echo "i = $i";
end:
echo 'j hit 17';
?>

Что здесь значит "while($j--)"? Условия, ведь, никакого нет...



Спустя 2 минуты, 22 секунды (21.07.2011 - 20:35) kristall написал(а):
Пока $j больше нуля, а затем вычесть 1.

Спустя 1 минута, 30 секунд (21.07.2011 - 20:36) DySprozin написал(а):
alex455
означает, что если $j!=0, то уменьшить $j на единицу и продолжить цикл
если $j==0, то оборвать цикл и уменьшить $j на единицу

Спустя 1 минута, 16 секунд (21.07.2011 - 20:38) DySprozin написал(а):
в данном контескте - продолжать, пока $j != 17 (тк if($j==17) goto end; )

Спустя 2 минуты, 28 секунд (21.07.2011 - 20:40) bulgakov написал(а):
Да, $j у вас в for задается равной 50, потом при каждой итерации в условии цикла while она будет уменьшаться на единицу, но когда достигнет значения 17 выполниться goto и выполниться последнее echo, чего я не пойму так вообще смысл этого скрипта?

Спустя 36 секунд (21.07.2011 - 20:41) DySprozin написал(а):
bulgakov
видимо, "учебный" (;

Спустя 25 секунд (21.07.2011 - 20:41) kristall написал(а):
goto end !!!! Ёёё, я даже сразу не понял, ибо так не бывает.

Спустя 1 минута, 7 секунд (21.07.2011 - 20:42) bulgakov написал(а):
Цитата
видимо, "учебный" (;

страшно подумать что за учебник...

Спустя 1 минута, 31 секунда (21.07.2011 - 20:44) DySprozin написал(а):
bulgakov
хорошая трава стоит хороших денег))

kristall
;;так не бывает
конечно, не бывает))

Спустя 1 минута, 54 секунды (21.07.2011 - 20:46) kristall написал(а):
DySprozin
У меня тоже ссылка есть.
http://govnokod.ru/php

goto -- это вообще за гранью добра и зла.

А для досрочного выхода из циклов есть оператор break. http://ru.php.net/manual/en/control-structures.break.php

Спустя 51 минута, 28 секунд (21.07.2011 - 21:37) inpost написал(а):
break 2 надо, чтобы выйти сразу из 2-х циклов, но никак не goto , очень неудобно отслеживается. По крайней мере говорят практиканты.

Спустя 2 минуты, 21 секунда (21.07.2011 - 21:39) neadekvat написал(а):
Цитата (kristall @ 21.07.2011 - 21:46)
goto -- это вообще за гранью добра и зла.

Где-то увидел, теперь везде пишешь?

Хорошая такая вещь. На счет циклов не уверен - там и правда есть break.

В php нельзя отправлять назад. Только вперед по скрипту. Поэтому теперь вместое лишнего if можно написать goto. Разве не удобно?


Цитата
очень неудобно отслеживается. По крайней мере говорят практиканты.

Еще раз - в php нельзя отправлять назад. А уж вниз реально страницу прокрутить? Так что все ок. С умом к нему надо подходить, вот и все.

Спустя 10 минут, 22 секунды (21.07.2011 - 21:50) inpost написал(а):
ctrl+f , вместо банальных стилей?! Конечно, Я закончил на 12 пробелах слева, значит меня отправят куда? Да фиг его знает, вдруг в 4 пробела, а вдруг в... вообщем, функция, которую отслеживать прийдется только при помощи ctrl+f...
Даже Котеров говорил, что это функция была лишь пиар-ходом, таким, как возможность внутри текста чистого вставлять пхп-код, хотя программисты более высокого уровня этим на шалят.

Спустя 9 минут, 7 секунд (21.07.2011 - 21:59) neadekvat написал(а):
Цитата (inpost @ 21.07.2011 - 22:50)
хотя программисты более высокого уровня этим на шалят.

Нельзя верить всему, что пишут. Даже в книгах. Даже у Котерова. Он только и известен - что по своим книгам о php, если по факту.

Вот смотри, кусок рабочего кода:
        $dir = @opendir($tmp_dir .'word/media');
if ( ! $dir)
goto after_pictures_dir;
while($file = readdir($dir))
{
// 20 строк
}
closedir($dir);

after_pictures_dir:
// код.

Как бы он выглядил без goto? Да и вообще, что страшного в этом коде с goto? Кроме, разве что @, которая тут стоит, чтобы не дергать лишний раз файловую систему и не устраивать лишнюю проверку на существование каталога.

Спустя 4 минуты, 57 секунд (21.07.2011 - 22:04) DySprozin написал(а):
;;Как бы он выглядил без goto?

так вроде удобней читать, нет?))

$dir = @opendir($tmp_dir .'word/media');
if ($dir) {
while($file = readdir($dir)) {
//строка 1
//строка 2
//строка 3
//строка 4
//строка 5
//строка 6
//строка 7
//строка 8
//строка 9
//строка 10
//строка 11
//строка 12
//строка 13
//строка 14
//строка 15
//строка 16
//строка 17
//строка 18
//строка 19
//строка 20

}
closedir($dir);
}

// код.


и метку по всему файлу искать не надо))

Спустя 5 минут, 45 секунд (21.07.2011 - 22:10) neadekvat написал(а):
Цитата (DySprozin @ 21.07.2011 - 23:04)
так вроде удобней читать, нет?))

Еще и два пробела в отступе?!11 Нет, ни разу не удобнее.

Ой, да что вы, метку искать.. а вот закрывающуюся скобку искать конечно же не придется.
И не надо про подсветку - у лабелов она тоже есть в нормальных редакторах.

Спустя 15 минут, 14 секунд (21.07.2011 - 22:25) Winston написал(а):
Цитата (kristall @ 21.07.2011 - 20:46)
goto -- это вообще за гранью добра и зла.

goto зло ?
Цитата (neadekvat @ 21.07.2011 - 21:59)
Он только и известен - что по своим книгам о php

И еще кое-чем.
И мало мне в это верится
Цитата
Владею в совершенстве

По последней ссылке.

Спустя 1 час, 2 минуты, 11 секунд (21.07.2011 - 23:27) inpost написал(а):
neadekvat
Вот как раз такой пример намного удобнее, видишь выполнение условия, понимаешь, что всё, что в скобке как раз и выполняется далее, особенно когда:
if($dir)
myFunc();

Без всяких goto

Спустя 12 минут, 41 секунда (21.07.2011 - 23:40) DySprozin написал(а):
вот раздули из мухи слона))
user posted image

Спустя 2 минуты, 15 секунд (21.07.2011 - 23:42) neadekvat написал(а):
Цитата (inpost @ 22.07.2011 - 00:27)
Вот как раз такой пример намного удобнее, видишь выполнение условия, понимаешь, что всё, что в скобке как раз и выполняется далее, особенно когда:

Печалька, когда таких вложенных условий может быть очень много. Тогда весь код уезжает вправо, приходится его либо выносить в отдельный файл, либо в функцию, либо еще что-то.
А с goto в этом необходимость пропадает. Читабельность сохрнаяется.

Спустя 9 часов, 2 минуты, 1 секунда (22.07.2011 - 08:44) twin написал(а):
Все хорошо на своем месте. Если слушать всех, кто где-то как то обжегся, то половину PHP нужно забыть. Вернее даже и не трогать. Вот глобальные переменные допустим или eval() тот же. Модификатор e. Да много про что пишут.

Конечно желательно придерживаться общепринятых рамок. Код, состоящий из одних goto будет достаточно тяжелочитаем. Но иногда это действительно полезная вещь. Как и все остальное.

Говорить, что это зло - ограничивать себя в возможностях.

Спустя 3 часа, 28 минут, 19 секунд (22.07.2011 - 12:12) alex455 написал(а):
Цитата (DySprozin @ 21.07.2011 - 21:41)
bulgakov
видимо, "учебный" (;

Да, с официального сайта PHP.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.