PHP学习宝典-第七章控制结构
本章重点 ◆ 建立和组合逻辑测试 ◆ 使用if和switch进行分支处理 ◆ 使用while和for ◆ 使用exit和die退出页面的执行 如果不能让程序可因不同的情况来决定不同的执行,就很不容易编写出有用的程序。简单地说,输出显示变数的程序码行为取决于某个变数的值,做为一个程序设计师,我们可以透过不同的动作让程序对事件做出不同的回应(可依照外在世界、时间、使用者的输入或资料库的内容等等来配合)。 这种程序回应需要一种「控制结构(control structure)」,这个结构可控制指示在不同的情况下应该配合不同的程序码来执行。在上一章中,我们使用了if这样的控制结构,但没有真正深入讲解它,在这一章中,我们会介绍PHP提供的每种控制结构,并详细研究它们的运作与操作方式。 针对有经验的C语言程序设计师:在PHP的所有功能里,「控制」这部份是与C语言风格上最相似的,C语言中原来使用的所有结构都可以在这里使用,而且运作的方式也相同。如果你是有经验的C语言程序师可以跳过前面直接阅读本章末尾的小节。 我们将讨论的两大控制结构类型是分支(branch)和回圈(loop)。分支是程式执行通路上的一个分叉口,取决于某种测诗,程式可选择向左进行或向右进行,以后的路可能不相同,也可能重新汇合在一起。回圈是某种分支类型之一,它有一条执行路径转回到分支的开始处,可重覆进行测试度可能重覆循环执行。 在有效利用控制结构之前,必须能够有效地建构测试条件。我们先从最简单的测试开始,先了解常数TRUE和FALSE,然后在更复杂的程式码中使用这些测试。 Boolean运算式 本章中介绍的每种控制结构都含有两个截然不同的部份:一个是测试部份(决定往哪能个方向进行),一个是由测试的程式码(为单独的分支或是回圈)测试是透过Boolean运算求值进行的,以「真」或「非真」的判断为运算式的结果。 Boolean常数 最简单的运算式类型就是个简单值(simple value),最简单的Boolean值就是TRUE和FALSE常数,反之亦然。例如,我们可以在if-else叙述的测试部份嵌入它们:
逻辑运算子 逻辑运算子可以组合其它逻辑(又称Boolean)值来产生新的Boolean值。PHP支援标准的逻辑运算(and、or、not和xor)前两个还有可替代的版本,如表7-1所示。 7-1 逻辑性运算符号 对于C语言程式设计师来说,一定很熟悉「&&」和「||」运算子。「!」运算子通常称为「NOT」,原因很明显。 下面的运算式是逻辑运算子的范例: (($statement_1 && $statement_2)|| ($statement_1 && ! $statement_2)|| (! $statement_1 && $statement_2)|| (! $statement_1 && ! $statement_2)|| 这是一种「同义反复」,是指无论叙述的变数值是什么,结果都为真。两个变数的真正值有四种可能的组合,其中每个都由一个「&&」运算子表示。这四种中必然有一种为真,因为它们是用「||」运算子连结在一起的。整个运算式必然为真。 下面例子所使用的xor是更巧妙的「同义反复」示范: (($statement_1 and $statement_2 and $statement_3) xor ((! ( $statement_1 and $statement_2)) or (! ( $statement_1 and $statement_3)) or (! ( $statement_2 and $statement_3)))) 这个运算式的含义是:「给定三个叙述语句,只能以生下面的这两种情况之一:若非氖的三个叙述都有为真,就会是有一对叙述不为真。」 逻辑运算子的优先顺序 与其它任何一种运算子相比,有些逻辑运算子的优先顺序更高,但都还可以使用圆括弧来改变优先顺序。以优先顺序的高低排列逻辑运算子的顺序比其它的低得多,因此指定运算子(=)比「and」绑得更紧,但比「&&」绑得松一些。 在http://www.php.net/线上手册中有一份运算子的优先顺序和关联性的完整列表。 逻辑运算子的短路 Boolean运算子有个非常便利顺手的特质就是从左到右结合,并能够设计让它「短路(short-circuit)」,如果第一个参数确定为真值,则根本不必再继续计第二个参数。例如在确定两个数字的非常近似比率,但还要避免可能除以0的错误。首先进行测试,为确保除数不是0,使用「!=」(不等于的意思)运算子即可: if ($denom != 0 && $numer/ $denome>2) print(“More than twice as much!”); 在$denom为「0」的情况下,无论第二个运算式是真还是假,「&&」运算子应该传回「非真」值。因为短路特性,第二个运算式就不被求值了,因此避免错误的发生。在$denom不等于「0」的情况下,「&&」运算子没有足够的资讯取得真值的结论,因此对第二个运算子求值。 上一篇:PHP学习宝典-第六章(续篇) 下一篇:PHP学习宝典-第八章(一) 更多相关文章
|
推荐文章
精彩文章
|