2010-09-05 3 views
16

Я только начал изучать программирование. Я учился на циклы, но эта программа не работает должным образом. Я хочу, чтобы разорвать петлю, когда $a равно 3 так что я получаю выход 1 2, но я получаю 3, как выход :(Простой для цикла не работает

for($a=0;$a<10;++$a) 
{ 
     if($a==3) 
       break 
     print"$a "; 
} 

Пожалуйста, помогите.

+13

Это хороший пример, чтобы поддержать аргумент в пользу всегда использования фигурных скобок. С ними вы получите синтаксическую ошибку. bmb

+0

+1 для использования фигурных скобок. –

+0

@bmb: + для брекетов. Я добавил это к моему ответу. – codaddict

ответ

41

Отсутствие запятой после break


Интересно знать, почему ваша программа ведет себя так, как она.

Общий синтаксис break в РНР:

break Expression; 

Выражение не является обязательным, но если присутствует его значение указывает, сколько вложенных ограждающие конструкции должны быть сломаны из.

break 0; и break 1; такие же, как break;

Ваш код эквивалентен

if($a==3) 
     break print"$a "; 

Теперь print функция в PHP всегда возвращают 1. Следовательно, это эквивалентно

if($a==3) 
     break 1; 

так, когда $a является 3 печати его значение и перерыв.

Целесообразно использовать фигурные скобки, чтобы заключить тело условного или петлевого, даже если тело имеет один оператор. В этом случае, охватывающий if тела в фигурных скобках:

if($a==3) { 
    break 
} 
print"$a "; 

дал бы ошибку синтаксиса: PHP ожидает ;, но находит }

Все вышеперечисленное относится к PHP continue, а также. Таким образом, программа

for($a=0;$a<10;++$a) 
{ 
     if($a==3) 
       continue 
     print"$a "; 
} 

также печатает 3 по той же причине.

+1

Что за казнь! – erisco

+2

Я действительно этого не знал. +1 – Cam

3
for($a=0;$a<10;++$a) 
{ 
     if($a==3) break; 
     print $a; 
} 

@ Разборщики: что случилось, кроме меня, лаконичного?

+0

не проголосовавший, но это еще лишний –

4

Как сказано в кодексации, вам не хватает полуколонии после перерыва.

Ваш код должен выглядеть следующим образом:

for($a=0;$a<10;++$a) 
{ 
     if($a==3) 
      break; 
     echo $a, ' '; 
} 
+0

@Downvoters, в чем была проблема с этим ... – judda

+0

Не downvoter, но проблема OP заключается в том, что он * не * получает синтаксическую ошибку. – bmb

19

Вы пропускаете точку с запятой в конце перерыва.;)

И даже с точкой с запятой он не будет работать так, как вы ожидали, так как он будет считаться от 0 до 2. Вы должны написать это так, чтобы получить только 1 2.

<?php 
for($a=1;$a<10;++$a) 
{ 
    if($a==3) 
      break; 
    print"$a "; 
} 
?> 

Примечание. $ A теперь один в инициализации цикла цикла.

EDIT: Еще одна вещь, которую я заметил, о которой вы должны знать. В вашем управлении циклом вы имеете предварительный приращение (++$a). Это в основном означает, что PHP увеличивает значение $a, а затем возвращает $a. Другим вариантом является пост-инкремент ($a++), где $a возвращается, а затем увеличивается на единицу.

В вашем случае в обоих случаях вы получите правильный выход tho.

Это иногда очень важно. Просто имейте это в виду.

0
for($a=0;$a<10;$a++) { 
    if($a==3) { exit; } 
    else { echo $a; } 
} 
+0

Использование 'exit', вероятно, неверно - придерживаться' break' было бы лучше. –

Смежные вопросы