最新消息:

PHP流程控制

PHP学习笔记 admin 2393浏览 0评论

PHP和其他语言一样有专门的流程控制语句。包括条件判断分支语句、循环语句等。

一、分支语句

1、if语句

与if一起使用的有else和elseif。

201308072120162013080721202920130807212133

ps:elseif也可以写成else if,两者作用完全一样。

2、switch语句

switch语句属于多分支判断语句。通常把一个变量或表达式与很多不同的值相比较,并根据值的不同来执行不同的代码。

20130807212450

20130807212712

ps:default匹配任何与其他case语句不匹配的情况。

二、循环语句

1、while循环

20130807212816

while循环语句的意思是只要expr1的表达式的值为TRUE就会重复执行嵌套的循环语句。每次循环开始时检查expr1表达式的值是否为TRUE,如果为FALSE就会终止循环。

2、do….while循环

20130807212816

do..while循环与while循环非常相似,区别是表达式的值是在每次循环结束时来检查而不是开始时,因此do…while循环语句会至少执行一次。

3、for循环

20130807213420

expre1在循环开始之前无条件求值一次,expr2在每次循环开始前计算,如果为TRUE则继续循环。expr3在每次循环后运行。

4、foreach循环

PHP4开始引入forteach循环,提供了遍历数组的简便方法。在PHP4中,foreach仅能用于遍历数组,当试图将其用于其他数据类型或一个未初始化变量时会产生错误。自PHP5开始,foreach还可以用于遍历对象。

foreach开始执行时,数组内部的指针会自动指向第一个单元。

20130807214108

ps:

(1)上面第二种遍历,除了将数组元素的值赋给$value之外,该元素的键名也会在每次循环中赋给变量$key.

(2)foreach所操作的是指定数组的一个复制,而不是数组本身,因此对返回的数组元素的修改不会影响到原数组。当数组元素的值可被引用时,如果$value是数组元素值得引用,那么改变$value的值就会影响到原数组元素的值。

20130807214854

(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,循环到最后一个的时候的输出是倒数第二个元素,而不是最后一个。

20130808102843

要得到正确的结果可以这么写

<?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流程控制

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址