[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: почему при использовании функции for (;;) зависает
sasha300
Вот код:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
<head>
<title>
Цикл for</title>
<meta
http-equiv="Content-Type" content="text/html; charset=windows-1251" />
</head>
<body>
<h1>
Цикл for</h1>
<?php

/*
ЗАДАНИЕ 1
- Используя цикл for выведите в столбик Нечётные числа от 1 до 50
*/

for (;;){
echo $a.'<br>';
}
?>
</body>
</html>



При запуске браузер зависает, но почему, если вот тут значение должно быть "false", а получается "true"

user posted image

p.s.: и почему не работает "уведомление на e-mail при ответах?"?
paul85
sasha300, таким способом объявляется бесконечный цикл.
Неудивительно, что браузер "зависает".

Точно так же объявляется, кстати, и в С/C++. А поскольку PHP написан именно на нем, смею предположить, что реализация циклов сишная (нативная, ассемблеровская - не знаю как сказать - короче, без преобразований). Тем более что синтаксис один в один... А почему так - это вопрос к разработчикам С! =)

Из книги "Язык программирования Си", Б. Керниган и Д. Ритчи (разработчик):
Цитата
Грамматически все три компонента в FOR являются выражениями. Наиболее распространенным является случай, когда выражение 1 и выражение 3 являются присваиваниями или обращениями к функциям, а выражение 2 - условным выражением. Любая из трех частей может быть опущена, хотя точки с запятой при этом должны оставаться. Если отсутствует выражение 1 или выражение 3, то оно просто выпадает из расширения. Если же отсутствует проверка, выражение 2, то считается, как буд-то оно всегда истинно, так что FOR(;;){...} является бесконечным циклом.

Вот примерно так!
sasha300
paul85
В общем для функции for если значение не определено, то оно "true". Странно..
Большое спасибо за ответ!
paul85
sasha300, ну почему странно? Очень хороший и простой способ объявить бесконечный цикл! Правда потребность в нем - явление довольно редкое. В основном когда требуется сложное условие его прекращения, которое 3-мя выражениями определить невозможно, или неудобно.

Тогда пишут условие внутри цикла и выходят из него через break. В С еще можно по return, но не знаю работает ли в PHP...
andrey888
Цитата
В С еще можно по return, но не знаю работает ли в PHP...

работает.
Цитата
В общем для функции for если значение не определено, то оно "true". Странно..

Наоборот логично. For это цикл а не функция. В условии цикла есть выражение которое обязано приводиться к Булеву типу .

for (;;){ // = for ( ; если ничего то поехали ; )
echo $a.'<br>';
}
- вот мы и едем )

_____________
Прогноз на следующие 5 лет : Россия, Китай - две величайшие державы.
США в Ж*пе. Справедливость восторжествует. )
Быстрый ответ:

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