在上述语法格式中,for关键字后面的小括号“O”中包括3部分内容,分别为初始化表达式、循环条件和操作表达式,它们之间用“;”分隔。其中,初始化表达式用于给循环变量设置初始值;接着判断循环条件,当循环条件为true时执行循环体;操作表达式用于设置每次循环结束后执行的操作,如对循环变量进行递增或递减。for语句的执行流程如图2-8所示。
下面演示如何使用for语句输出5个“☆”字符,示例代码如下。
1 for( \mathbb{S}\perp\mathbf{\Psi}=\mathbf{\Psi}5 \mathtt{S i}>0 \mathbb{S}\bot--
2 echo'☆';
3
在上述代码中,变量Si的初始值为5,判断i是否大于0,如果判断结果为true,则执行第2行代码,输出“☆”字符,通过操作表达式“Si--^{\ast}将\cdot\Si$ 减1。Si减1后继续判断Si是否大于0,如果大于0则继续循环,直到Si的值为0时,不满足条件,退出循环。

多学一招:流程控制语句的替代语法
替代语法是在HTML模板中嵌入PHP代码时的一种可读性更好的语法,其基本形式就是把if语句、switch语句、while语句、for语句、foreach语句的左大括号“”换成冒号“:”,把右大括号“}”分别换成“endif;”“endswitch;”“endwhile;”“endfor;”“endforeach;”。
下面演示如何使用for语句的替代语法输出5个“☆”字符到表格中,具体代码如下。
1 <table>
2 <?php for( \varsigma_{~\scriptsize~\perp~}=\;5 \mathsf{S i}\ >\ 0 ; $i--) : ?>
3 <tr>
4 <td> *<?=" ☆ ?>< /td>
5 </tr>
6 <?php endfor; ?>
7 </table>
在上述代码中,第2行代码使用for语句的替代语法循环5次,第4行代码使用PHP标记和echo语句的简写语法输出“☆”字符。
从上述代码可以看出,表格中for语句的开始位置和结束位置很明确,可以避免分不清for语句的开始位置和结束位置的情况发生,增强了代码的可读性。
2.5.4循环嵌套
循环嵌套是指在一个循环语句的循环体中再定义一个循环语句。while语句、do...while语句、for语句都可以进行嵌套,并且它们之间也可以互相嵌套,其中最常见的是for语句嵌套for语句,具体语法格式如下。
for(初始化表达式;循环条件;操作表达式){ //外层循环 for(初始化表达式;循环条件;操作表达式){ //内层循环 循环体
下面使用循环嵌套输出由五角星字符组成的直角三角形,直角三角形的效果如图2-9所示。
☆☆ ☆☆☆ ☆☆☆☆
从图2-9可以看出,直角三角形由五角星“☆”字符构成,一共5行,第1行有1个五角星,第2行有2个五角星,依次类推。
通过上述规律,实现输出直角三角形需要使用两个for语句,一个for图2-9直角三角形的效果语句用于控制三角形的行数,另一个for语句用于控制每行“☆”字符的个数,并且“☆”字符的个数和三角形的行数相等。
使用循环嵌套输出由五角星字符组成的直角三角形,示例
1 <?php
2 for( \dot{\bf\Delta}\varsigma_{\perp}\;=\;1\; rm{\scriptsize5i}<=\ 5 \mathbb{S}\perp++ //控制三角形的行数
3 for (\mathbb{S} \mathbf{j}\ =\ 1 ;j<=~\varsigma\dot{\boldsymbol{\perp}}:\hat{\varsigma}\dot{]}+\boldsymbol{+}$ //控制每行“☆”字符的个数
4 echo '☆';
5
6 echo '<br>';
7
在上述代码中,第2行代码用于控制三角形的行数,第3行代码用于控制每行“☆”字符的个数。上述代码中循环嵌套的执行流程如下。
第2步:第3行代码中Sj的初始值为1,循环条件j<=\mathbb{S}i$ 的结果为true,首次进入内层循环,输出一个“☆”字符。
第3步:执行第3行代码中内层循环的操作表达式 S j++ ,将$j的值变为2。
第4步:执行第3行代码中的循环条件 \mathbb{S}j<=\mathbb{S}i ,结果为false,内层循环结束,执行第6行代码,输出换行符。
第5步:执行第2行代码中外层循环的操作表达式 S i++ ,将$i的值变为2。
第6步:执行第2行代码中的循环条件 * Si<=5 ,结果为true,继续执行内层循环。
第7步:此时$i的值为2,内层循环会执行2次,即在第2行输出2个“☆”字符,内层循环结束并输出换行符。
第8步:以此类推,$i的值为3,内层循环会执行3次,输出3个“☆”字符,直到Si的值为6时,外层循环结束。
2.5.5【案例】九九乘法表
1.需求分析
九九乘法表体现了数字之间乘法的规律,是数学中必学的内容。请使用循环语句实现九九乘法表,效果如图2-10所示。
×1=1
×2=2]2×2=4
[1×3=32×3=63×3=9
[×4=4]2×4=83×4=124×4=16]
[1×5=52×5=103×5=154×5=205×5=25]
×6=62×6=123×6=18|4×6=245×6306×6=36
[1×7=7|2×7=143×7=214×7=285×7=356×7=427×7=49]
1×8=82×8=163×8=244×8=325×8=406×8=487×8=568×8=64
1×9=92×9=183×9=274×9=365×9=456×9=547×9=63 8×9=72 9×9=81]
2.实现思路
在图2-10中,九九乘法表共9层,假设最顶层是第1层,第1层由1个单元格组成,第2层由2个单元格组成,依次往下递增,第9层由
9个单元格组成。单元格中包括乘数和积,以 2x3=6 为例,2和3是乘数,6是积。
通过分析图2-10所示的九九乘法表,可以得出以下规律。
① 每层单元格中乘号左边的乘数从1开始,从左向右依次递增,直到等于层数为止。
② 每层单元格中乘号右边的乘数和这一层的层数相等,例如,第2层乘号右边的乘数都是2,第3层乘号右边的乘数都是3。
通过以上规律可以得出,实现九九乘法表需要使用两个for语句得到每层的两个乘数。九九乘法表的具体实现步骤如下。
① 在第一个for语句中循环每层的乘号右边的乘数,将循环变量作为第二个for语句的循环条件。
⊚ 在第二个for语句中循环每层的乘号左边的乘数。
③ 输出每层中的两个乘数和积。
3.代码实现
本书在配套源码包中提供了本案例的开发文档和完整代码,读者可以参考并进行学习。
2.5.6跳转语句
在循环结构中,如果想要控制程序的执行流程,例如满足特定条件时跳出循环或结束循环,可以使用跳转语句来实现。PHP常用的跳转语句有break语句和continue语句,它们的区别在于,break语句用于终止当前循环,跳出循环体;continue语句用于结束本次循环的执行,开始下一轮循环。
下面统计 1~100 中的奇数的和。使用for语句循环变量Si的值,在循环体中,使用if语句判断变量 *\Phii 的值,若为奇数,则对Si的值进行累加;若为偶数,则使用continue语句结束本次循环,不对 \operatorname{\DeltaSi} 的值进行累加,示例代码如下。
1 \mathsf{S} \mathsf{s u m}\ =\ 0
2 for ~\boldmath~\Delta~\setminus\{~\scriptsize~S~i~\ 5{i<=\ 100} ; \mathbb{S}\perp++
3 if (\hat{\mathbb{S}}\dot{\mathbb{1}}\ \ (\circ)/(\circ)\ \ 2\ ==\ 0
4 continue;
5 1
6 \ensuremath{\mathbb{S}}\ensuremath{sum}\ +=\ \ensuremath{\mathbb{S}}\ensuremath{i} ,
7
8 echo'sum=1.sum;
在上述示例代码中, \mathbb{S}sum 变量用于保存 1~100 中的奇数的和。第 2~7 行代码使用 for语句循环 1~100 的数;第 3~5 行代码用于判断当前的数是不是偶数,如果是则结束本次循环,进人下一次循环;第6行代码表示如果当前的数是奇数,则将当前的数累加到变量sum中。第8行代码输出sum的值,输出结果为 ^{\leftarrow}\mathbb{S}sum=2500^{"} 。
如果将示例代码中的第 4行代码修改为break;,当 {\Phi}{Si} 递增到2时,该循环终止执行,最终输出的结果为 {}^{*}\mathbb{S}sum=1^{*}
2.6文件包含语句
在程序开发中,通常会将页面的公共代码提取出来,放到单独的文件中,然后使用PHP提供的文件包含语句,将公共文件包含到程序中,从而实现代码的复用。例如,项目中的初始化文件、配置文件、HTML 模板文件等都是公共文件。文件包含语句包括 include 语句、require
语句、include_once 语句和 require_once 语句,本节将对文件包含语句的使用进行详细讲解。
2.6.1include 语句和require 语句
使用 include语句和 require 语句都可以引入外部文件,这两个语句的区别是,当引入的外部文件出现错误时,include 语句的处理方式和 require 语句的处理方式不同:include语句会产生警告,程序继续运行;require语句会产生警告和致命错误,程序停止运行。
include 语句的语法和 require 语句的语法类似,下面以 include 语句为例进行讲解。include 语句的语法格式如下。
//第1种写法
include‘完整路径文件名';//第2种写法
include(‘完整路径文件名');
在上述语法格式中,include语句的两种写法不同,但实现的功能相同。完整路径文件名是指被包含文件所在的绝对路径或相对路径。
绝对路径是指从盘符开始表示的路径,如“C:/web/test.php”;相对路径是指从当前目录开始表示的路径,如引l人当前目录下的 test.php 文件,相对路径就是“./test.php”。相对路径中的“”表示当前目录,“”表示当前目录的上级目录。
下面演示如何使用include语句引「入外部文件,具体步骤如下。
① 创建test.php,具体代码如下。
<?php echo 'ok';
创建index.php,使用 include 语句引人test.php,具体代码如下。
<?php include './test.php';
通过浏览器访问 index.php,运行结果如图2-11所示。
从图 2-11 中可以看出,index.php 文件的输出内容为“ok",说明使用文件包含语句引人了test.php文件。
下面演示使用 include 语句和 require 语句引入不存在的文件时的区别,具体步骤如下。

① 创建 import.php,具体代码如下。
1 <?php
2 include './wrongFile.php'; //此行代码会产生警告
3 echo 'Hello, PHP'; //此行代码会执行
在上述代码中,第2行代码使用 include 语句引l人 wrongFile.php 文件,该文件是一个不存在的文件;第3行代码输出“Hello,PHP”字符串,通过浏览器访问 import.,php,运行结果如图2-12 所示。

从图2-12所示的运行结果可以看出,虽然运行程序后产生了警告,但是依然输出了“Hello,PHP",说明使用include语句引人的外部文件不存在时,运行程序会产生警告,但程序会继续运行。
② 修改 import.php,具体代码如下。
1 <?php
2 require './wrongFile.php'; //此行代码会产生警告和致命错误
3 echo 'Hello,PHP'; //此行代码不会执行
在上述代码中,第 2行代码使用 require 语句引l人 wrongFile.php 文件,通过浏览器访问import.php,运行结果如图2-13所示。

从图2-13所示的运行结果可以看出,程序运行后产生了警告和致命错误,没有输出任何内容,说明使用require语句引l人的外部文件不存在时,运行程序会产生警告和致命错误,程序会停止运行。
2.6.2include_once 语句和 require_once 语句
使用include_once和require_once语句引入外部文件时会检查该文件是否在程序中已经被引入过。外部文件如果已经被引人过,则不会被再次引人,避免重复引入。
include_once 和 require_once 语句的语法和 include语句的语法相同,下面以 include_once语句为例,演示使用include_once语句和include语句引l人外部文件的区别。使用这两种语句在for语句中引人外部文件,统计引入外部文件的次数,具体实现步骤如下。
① 创建 once.php 外部文件,具体代码如下。
在上述代码中,定义Ssum变量,统计文件被引|人的次数。
⊚ 创建 include_once.php 文件,具体代码如下。
1 <?php
2 for \mathbb{S}\perp\mathbf{\Psi}=\mathbf{\Psi}1 rm{\scriptsize5i}<=\ 5 \mathbb{S}\perp++
3 include_once './once.php';
4
5 echo‘使用include_once 语句引入外部文件的次数:'.$sum;
6 echo '<br>';
7 for \mathbb{S}\perp\mathbf{\Psi}=\mathbf{\Psi}1 rm{\scriptsize5i}<=\ 5 \mathbb{S}\perp++
8 include './once.php';
9
10echo‘使用include语句引入外部文件的次数:'.$sum;
在上述代码中,第 2~4 行代码在 for 语句中使用 include_once 语句引l入once.php文件,第5行代码输出once.php中Ssum的值,第 7~9 行代码在for语句中使用include语句引l人once.php文件,第 10行代码输出 once.php 中$sum 的值。通过浏览器访问 include_once.php,运行结果如图2-14所示。

从图 2-14 所示的运行结果可以看出,include_once 语句的输出结果为1,表示只引人了1次 once.php 文件;include 语句的输出结果为5,表示引入了5 次 once.php 文件。
本章小结
本章首先讲解了PHP的基本语法,接着讲解了变量、常量和表达式,然后讲解了数据类型和运算符,最后讲解了流程控制和文件包含语句。通过学习本章的内容,读者应掌握PHP的基本语法,学会编写PHP脚本,掌握常用的数据类型和运算符的使用方法,能够使用流程控制语句控制程序的执行流程。
课后练习
一、填空题
1.PHP 的标准标记以‘ ”开始,以 {^{*{°}{\circ}}} ”结束。
2.PHP的预定义常量 用于获取运行PHP的操作系统信息。
3.PHP中用于定义常量的函数是
4.用于终止当前循环、跳出循环体的语句是
5.用于结束本次循环的执行、开始下一轮循环的语句是
二、判断题
1.“&&”“and”实现的功能相同,但是前者的优先级比后者的高。(
关键字可以作为常量、函数名或类名使用,方便记忆。(
3.运算符中“or”的优先级最高。(
4.递增运算符放在操作数的前面是指先进行递增运算,再进行其他运算。(
5.比较运算符中的“”用于判断变量是否大于或小于某个值。(
三、选择题
1.下列选项中,关于标识符的说法错误的是(
A.在项目中,类名、方法名、函数名、变量名等都被称为标识符B.标识符由字母、数字和下划线组成
C.当标识符由多个单词组成时,可直接进行拼接,没有格式要求D.标识符用作变量名时,区分大小写
2.下列运算符中,优先级最高的是( )。
A.& B.! C. 1 D.以上答案全部正确
3.下列选项中,递增递减语句正确的是(
A. +\mathbb{S}\mathbf{a}+ B. +\mathbb{S}\mathbf{a}- C. +{-}\mathbb{S}{\mathbf{a}} D.$a++
4.下列选项中,不属于PHP关键字的是( )。
A. static B.class C. add D. use
A. === 表示等于 B. <> 表示不等于C. != 表示不等于 D. >= 表示大于或等于
四、简答题
1.请列举PHP 中常用的预定义常量。
2.请列举PHP所支持的数据类型。
五、程序题
1.使用PHP程序实现交换两个变量的值。
2.通过PHP程序实现输出菱形的功能,如图2-15所示。
Web前端开发系列丛书
黑马程序员系列教材改版升级

