2014-05-03 62 views
1

我一直在試圖教自己的PHP和我碰到這個代碼(與所有的代碼,我嘗試了自己得到一個更好的理解等),但這一個不運行。雖然/開關在PHP

<?php 
$i = 0; 
while($i++){ 
switch ($i) { 
case 5: 
echo "At 5<br />"; 
break 1; 
case 10: 
echo "At 10; quitting<br />"; 
break 2; 
default: 
break; 
} 
} 
?> 

輸出僅僅是空白的,但會我說,$ i遞增,直至觸及5,此時開關($ i)不會去的回聲殼體5「在5」是正確的,然後它會打破switch語句並繼續在while循環中增加$ i直到達到10,然後它會重複相同的過程並回顯「在10;退出」,break 2會離開開關,while循環?

在爲$ i中的所有其他值我假設它會違約,並剛剛爆發開關

謝謝的。

+1

在第一個循環$ i值是默認的,它會中斷。 –

回答

2

問題是這樣的:

$i = 0; 
while($i++){ 

當你做$i++變量$i增加1,但返回的值仍是舊值,請參閱手冊上Incrementing/Decrementing operators。因此,$i第一次仍爲0時,條件評估爲false,且整個while()循環從不運行/您的switch永遠不會到達。

要增加,然後再返回值,你這樣做:

$i = 0; 
while(++$i){ 

example

+1

Ahhhhh,這很有道理,謝謝!解釋得很好 – user3562135

0

通過使用變量/常量而不是幻數來嘗試使代碼更具可讀性,並且還可以在循環中使用標籤來打斷/繼續。這裏是你的一個例子:

define("SOMETHING", 5); 
define("SOMETHING_ELSE", 10); 

$count = 0; 

mainLoop: 
while($count < 100) { #loop virtually forever 

    switch(++$count) { #increment and switch on $count in each iteration 

     case SOMETHING: #$count = 5 
      #do something here 
      echo "At 5<br />"; 
      break; #break switch, continue while loop 

     case SOMETHING_ELSE: #$count = 10 
      #do something else here 
      echo "At 10; quitting<br />"; 
      break mainLoop; #break while loop 

    } 

}