php中的While/Switch

php中的While/Switch,php,while-loop,switch-statement,Php,While Loop,Switch Statement,我一直在自学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; } } ?>

我一直在自学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)将在echo“at 5”处转到案例5,然后它将中断该switch语句并在while循环中继续递增$i直到它达到10,然后它将重复相同的过程并转到echo“at 10;quitting”断路器2会离开开关,而环路

在$i的所有其他值中,我假设它变为默认值,并且刚刚断开开关

谢谢。

问题是:

$i = 0; 
while($i++){
执行
$i++
操作时,变量
$i
将以1递增,但返回的值仍然是旧值,请参阅上的手册。因此,当
$i
第一次仍然是
0
时,条件的计算结果为
false
,并且整个
while()
循环永远不会运行/您的
开关永远不会到达

要先增加值,然后返回值,请执行以下操作:

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

请参阅。

尝试使用变量/常量而不是神奇的数字来提高代码的可读性,您还可以使用循环上的标签来中断/继续。下面是一个例子:

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

  }

}
定义(“某物”,5); 定义(“其他事物”,10); $count=0; 主回路: 而($count<100){#几乎永远循环 开关(++$count){#在每次迭代中递增并打开$count 案例某物:#$count=5 #在这里做点什么 回声“在5
”; 断开;#断开开关,继续循环 其他情况:#$count=10 #在这里做点别的 回声“10点;退出
”; 中断主循环;#在循环期间中断 } }
在第一个循环中,$i值变为默认值,并且会中断。啊,这很有意义,谢谢!解释得很好