PHP和其他语言一样有专门的流程控制语句。包括条件判断分支语句、循环语句等。
一、分支语句
1、if语句
与if一起使用的有else和elseif。
ps:elseif也可以写成else if,两者作用完全一样。
2、switch语句
switch语句属于多分支判断语句。通常把一个变量或表达式与很多不同的值相比较,并根据值的不同来执行不同的代码。
ps:default匹配任何与其他case语句不匹配的情况。
二、循环语句
1、while循环
while循环语句的意思是只要expr1的表达式的值为TRUE就会重复执行嵌套的循环语句。每次循环开始时检查expr1表达式的值是否为TRUE,如果为FALSE就会终止循环。
2、do….while循环
do..while循环与while循环非常相似,区别是表达式的值是在每次循环结束时来检查而不是开始时,因此do…while循环语句会至少执行一次。
3、for循环
expre1在循环开始之前无条件求值一次,expr2在每次循环开始前计算,如果为TRUE则继续循环。expr3在每次循环后运行。
4、foreach循环
PHP4开始引入forteach循环,提供了遍历数组的简便方法。在PHP4中,foreach仅能用于遍历数组,当试图将其用于其他数据类型或一个未初始化变量时会产生错误。自PHP5开始,foreach还可以用于遍历对象。
foreach开始执行时,数组内部的指针会自动指向第一个单元。
ps:
(1)上面第二种遍历,除了将数组元素的值赋给$value之外,该元素的键名也会在每次循环中赋给变量$key.
(2)foreach所操作的是指定数组的一个复制,而不是数组本身,因此对返回的数组元素的修改不会影响到原数组。当数组元素的值可被引用时,如果$value是数组元素值得引用,那么改变$value的值就会影响到原数组元素的值。
(3)foreach循环遍历对象时,需要区分是在对象的成员函数中还是在公共程序中使用。当在对象的成员函数中使用foreach循环时,将遍历对象的所有成员,包括公有成员、保护成员、私有成员。当在公共程序中使用foreach循环时,将只遍历对象的公有成员。
三、break终端循环。continue用于跳过本次循环中剩余代码,直接下一次循环条件判断。
ps:
PHP中foreach循环中使用引用要注意的地方
<?php $a = array(1,2,3,4); foreach($a as &$value) { $value = ($value *2); } foreach($a as $value) { echo $value."<br />"; } ?>
这么写,在第二个循环会出逻辑错误,在第二个循环中输出$value,循环到最后一个的时候的输出是倒数第二个元素,而不是最后一个。
要得到正确的结果可以这么写
<?php $a = array(1,2,3,4); foreach($a as &$value) { $value = ($value *2); } unset($value); foreach($a as $value) { echo $value."<br />"; } ?>
或者两个循环都用引用
<?php $a = array(1,2,3,4); foreach($a as &$value) { $value = ($value *2); } foreach($a as &$value) { echo $value."<br />"; } ?>
说一下原理
第 一个循环使用了引用,循环结束后,$value引用的是$ay数组的最后一个元素,当开始第二个循环的时候,$value变量每次循环都会被赋一个新值,在 php中,如果一个内存空间是被引用的,那么当改变它的时候是直接改变这块内存空间的值,也就是说,当第二个foreach的第一次循环,$a的 最后一个元素的值就被改变为$a的第一个元素的值,第二次循环的时候,改变为第二个元素的值,倒数第二次循环的时候,被改变为倒数第二个元素值, 而最后一次循环的时候得道的值必然是那个倒数第二个值
当然,如果php的for循环有作用域的话,也不会出现此问题…..
转载请注明:jinglingshu的博客 » PHP流程控制