2.6 PHP表达式
在PHP程序中,任何一个可以返回值的语句,都可以看作表达式。也就是说,表达式是一个短语,能够执行一个动作并具有返回值。一个表达式通常由两部分构成,一部分是操作数,另一部分是运算符。本节介绍常用的几种控制语句表达式,分别是条件语句、分循环语句,以及require和include语句等其他语句。
2.6.1 条件语句
条件语句在PHP中非常普遍,是PHP程序的主要控制语句之一。通常情况下,在客户端获得一个参数,根据传入的参数值,做出不同的响应。在PHP中条件语句分别为if语句、if-else语句、if-elseif-else语句和switch语句。
下面我们分别介绍这3种形式的条件语句:
1.if语句
if语句是许多高级语言中重要的控制语句,使用if语句可以按照条件判断来执行语句,增强了程序的可控制性。只有if语句的条件语句是最简单的一种条件语句,语法如下:
首先对expr求值,如果expr的值为True,则执行statement,如果值为False,将忽略statement。
图2-18所示为上述语法格式在执行时的逻辑结构。
图2-18 if语句逻辑示意图
例如:
上述实例演示了if语句的逻辑结构,会在变量$Num1大于$Num2时输出“$Num1大于$Num2”。
2.if-else语句
条件语句的第二种形式是if...else,除了if语句之外,还加上了else语句,else语句可以在if语句中表达式的值为False时执行,语法如下:
首先对expr求值,如果expr的值为True,则执行statement1;如果值为False,则执行statement2。
这种情况的执行逻辑结构如图2-19所示。
图2-19 if-else语句逻辑示意图
例如以下代码,在$a大于$b时显示“a大于b”,反之则显示“a不大于b”:
注意
else语句仅在if以及elseif(如果有的话)语句中的表达式值为False时执行,它不可以单独使用。
3.if-elseif-else语句
条件语句的第三种形式是if...elseif...else,elseif是if和else的组合。和else一样,它延伸了if语句,可以在原来的if表达式值为False时执行不同语句。但是和else不一样的是,它仅在elseif的条件表达式值为True时执行语句,语法如下:
首先对expr1求值,如果expr1的值为True,则执行statement1,如果值为False,则对expr2求值,如果expr2的值为True,则执行statement2,如果值为False,则对expr3求值,依次类推,如果所有的表达式的值都为False,则执行statementn。
这种情况的执行逻辑结构如图2-20所示。
图2-20 if-elseif-else语句逻辑示意图
例如以下代码将根据条件分别显示“a大于b”、“a等于b”和“a小于b”:
注意
elseif也可以写成else if(两个单词),它和elseif(一个单词)的行为完全一样。
4.switch语句
使用switch语句可以避免大量地使用if-else控制语句。switch语句首先根据变量值得到一个表达式的值,然后根据表达式的值执行语句。switch语句计算expression的值,然后和case后的值进行比较,跳转到第一个匹配的case语句开始执行后面的语句,如果没有case匹配就跳转到default语句执行,如果没有default语句,则退出。到找到匹配项的时候,解析器会一直运行直到switch结尾或者遇见break语句。case语句可以使用空语句。
PHP提供了分支(switch)语句来直接处理多分支选择,语法如下:
其中的常量表达式(constant-expression)可以是任何求值类型的表达式,即整型或浮点数以及字符串。
其逻辑结构如图2-21所示。
图2-21 switch语句逻辑结构
下面一段代码是switch语句的简单应用:
switch语句一行接一行地执行(实际上是语句接语句)。开始时没有代码被执行,仅当一个case语句中的值和switch表达式的值匹配时PHP才开始执行语句,直到switch的程序段结束或者遇到第一个break语句为止。如果不在case的语句段最后写上break的话,PHP将继续执行下一个case中的语句段。例如:
这里如果$a等于0,PHP将执行所有的输出语句;如果$a等于1,PHP将执行后面两条输出语句;只有当$a等于2时才会得到结果:a=2。
2.6.2 循环语句
循环语句也称为迭代语句,让程序重复执行某个程序块,直到某个特定的条件表达式结果为假时,结束执行语句块。在PHP中循环语句的形式有:while循环、do-while循环、for循环和foreach循环。
1.while循环语句
While循环语句的。格式是:
只要expr的值为True就重复执行嵌套中的循环语句。每次开始循环时检查expr的值。有时候如果while表达式的值一开始就是False,则循环语句一次都不会执行。一般来说,在代码片段中会存在改变表达式中变量的值,否则可能成为死循环。图2-22所示为该语句的逻辑结构。
图2-22 while语句逻辑示意图
例如:
执行该程序后会输出从1到5的数字。
2.do-while循环语句
do-while语句和while语句基本一样。不同之处在于while语句在“{}”内的语句执行之前检查条件是否满足,而do-while语句则先执行“{}”内的语句,然后再判断条件是否满足,如果满足就继续循环,不满足就跳出循环。
图2-23所示为该语句的逻辑结构。
图2-23 do-while语句逻辑示意图
例如:
以上循环将正好运行一次,因为经过第一次循环后,当检查表达式的真值时,其值为False($a不大于0)而导致循环终止。
3.for循环语句
for循环是PHP中最复杂的循环结构。for循环的语法是:
其中,第1个expr1在循环开始前无条件求值一次。第2个expr2在每次循环开始前求值。如果值为True,则继续循环,执行嵌套的循环语句。如果值为False,则终止循环。第3个expr3在每次循环之后被求值(执行)。每个表达式都可以为空。expr2为空意味着将无限循环下去(和C一样,PHP认为其值为True)。因为有时候会希望用break语句来结束循环而不是用for的表达式真值判断。
图2-24所示为该语句的逻辑结构,表达式2为true则执进程序片段,其值在表达式1中初始化,在表达式3中进行修改。
图2-24 for语句逻辑示意图
下面通过使用for循环语句输出九九乘法表:
4.foreach循环语句
foreach语句是一种遍历数组简便方法。foreach仅能用于数组,当试图将其用于其他数据类型或者一个未初始化的变量时会产生错误。有两种语法,第二种比较次要,但却是第一种的有用的扩展。
第一种格式:
第二种格式:
第一种格式遍历给定的array_expression数组。每次循环中,当前单元的值被赋给$value并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量$key。其执行的逻辑结构如图2-25所示。
图2-25 foreach语句逻辑示意图
该语句的使用方法如下:
此段代码的输出为:
在这段代码中遍历数组使用的是foreach语句的第一种格式,也可以使用第二种格式,改写上面的代码如下:
此段代码的输出为:
2.6.3 其他语句
为了帮助程序员更加精确地控制整个流程,方便程序的设计,PHP还提供了一些其他语句,这里做一下简单地介绍。
1.break语句
break语句用来结束当前的for、while或switch循环结构,继续执行下面的语句。break语句后面可以跟一个数字,用于在嵌套的控制结构中表示跳出控制结构的层数。
2.continue语句
continue语句用来跳出循环体,不继续执行循环体下面的语句,而是回到循环判断表达式,并决定是否继续执行循环体。continue语句后面同样可以跟一个数字,作用和break语句相同。
3.return语句
return()语句通常用于函数中,如果在一个函数中调用return()语句,将立即结束此函数的执行并将它的参数作为函数的值返回。
4.include()语句和require()语句
包含并运行指定文件。require()和include()除了处理失败之外,在其他方面都完全一样。include()产生一个警告,而require()则导致一个致命错误。也就是说,如果想在丢失文件时停止处理页面,应该使用require(),而include()则会继续执行脚本,同时也要确认设置了合适的include_path。
5.require_once()语句和include_once()语句
require_once()语句和include_once()语句分别对应require()语句和include()语句。require_once()语句和include_once()语句主要用于需要包含多个文件时,可以有效地避免把同一段代码包含进去而出现函数或变量重复定义的错误。
共有条评论 网友评论