赵工的个人空间


专业技术部分转网页计算转业余爱好部分


 编程语言

常用的编程语言
C#编程语言基础
C#面向对象与多线程
C#数据及文件操作
JavaScript基础
JavaScript的数据类型和变量
JavaScript的运算符和表达式
JavaScript的基本流程控制
JavaScript的函数
JavaScript对象编程
JavaScript内置对象和方法
JavaScript的浏览器对象和方法
JavaScript访问HTML DOM对象
JavaScript事件驱动编程
JavaScript与CSS样式表
Ajax与PHP
ECMAScript6的新特性
Vue.js前端开发
PHP的常量与变量
PHP的数据类型与转换
PHP的运算符和优先规则
PHP程序的流程控制语句
PHP的数组操作及函数
PHP的字符串处理与函数
PHP自定义函数
PHP的常用系统函数
PHP的图像处理函数
PHP类编程
PHP的DataTime类
PHP处理XML和JSON
PHP的正则表达式
PHP文件和目录处理
PHP表单处理
PHP处理Cookie和Session
PHP文件上传和下载
PHP加密技术
PHP的Socket编程
PHP国际化编码
MySQL数据库基础
MySQL数据库函数
MySQL数据库账户管理
MySQL数据库基本操作
MySQL数据查询
MySQL存储过程和存储函数
MySQL事务处理和触发器
PHP操作MySQL数据库
数据库抽象层PDO
Smarty模板
ThinkPHP框架
Python语言基础
Python语言结构与控制
Python的函数和模块
Python的复合数据类型
Python面向对象编程
Python的文件操作
Python的异常处理
Python的绘图模块
Python的NumPy模块
Python的SciPy模块
Python的SymPy模块
Python的数据处理
Python操作数据库
Python网络编程
Python图像处理
Python机器学习
TensorFlow深度学习
Tensorflow常用函数
TensorFlow用于卷积网络
生成对抗网络GAN


首页 > 专业技术 > 编程语言 > PHP程序的流程控制语句
PHP程序的流程控制语句

1.顺序结构:

在编程语言中,默认情况下都是按照语句的先后顺序从上到下依次执行的,这是默认的顺序结构。顺序结构中,所有语句都将执行一次。 按照语句的组成部分,可以将顺序结构中的语句分为表达式语句、空语句和复合语句三大类。

语句是PHP语言的最小组成单位,每个语句必须使用分号作为结束符。由于PHP语句使用分号作为语句结束符,可以把一个语句放在多行,多行只有一个分号会被认为是一条语句,但不推荐这样编写语句。也可以将多个语句放在一行,因为分号已分隔了多个语句。
为了使程序排列美观、容易阅读和排错,一般在一行内只写一个语句,并采用空格、空行来保证语句容易阅读。在复合语句内使用Tab键向右缩进。大括号总是放在单独一行,便于检查是否匹配。

1)表达式语句:

在PHP中将赋值作为一个运算符,因此只有赋值表达式。在赋值表达式后面添加分号就成了独立的语句。
一般表达式语句应能完成一个操作,如修改变量的值或者作为函数的参数。具体方法是,在表达式的左侧指定一个变量,来将表达式的值赋予变量;或者将表达式传递给函数等。

2)空语句:

空语句是指在程序中什么都不做,也不包括具有实际性的语句。在程序中,空语句主要用来作为空循环体。空语句的语法格式为:
; //其实就是一个分号
执行一个空语句,就是将控制转到该语句的结束点。

3)复合语句:

复合语句又称为语句块,是很多个语句的组合,从而可以将多个语句看作是一个单个语句。复合语句的语法格式为:
{
  statement-list //语句列表
}
复合语句由一个括在大括号内的可选statement-list组成。statement-list是由一个或者多个语句组成的列表,如果不存在statement-list,则称该语句块是空的。
执行规则是:如果语句块是空的,控制转到语句块的结束点。如果语句块不是空的,控制转到语句列表。当控制到达语句列表的结束点时,控制转到语句的结束点。

2.分支结构:

分支结构可以根据一个条件判断执行哪些语句块,适合于带有逻辑或关系比较等条件判断的计算。PHP中实现分支结构主要依靠if语句和switch语句来完成。

1)单分支:

在PHP中,if语句是使用最多的分支语句之一,它为分支代码的执行提供了一种便利的方法。If语句的最简单格式构成了单分支结构,表示“如果满足某种条件,就进行某种处理”。
语法格式为:
if (表达式){
  语句块; //满足条件时要执行的语句
}
如果表达式的结果为true,就执行语句块;如果值为false,将会忽略语句块。如果,如果语句块只有一条语句,这时可以省略大括号。示例:登录验证
<?php
$username="test";
$userpass="test";
$code="1AC8";
if ($username="admin" && $userpass="123456" && $code="1AC8"){
  echo "登录失败。\n";
  echo "请检查输入的用户名、密码和验证码是否正确。";
}
?>

2)双分支:

如果在程序中,要对不符合条件的情况也做出处理,就可以使用双分支的if else语句。If else语句是对if语句的扩展,可以定义两个操作:如果条件正确,则执行一个操作,否则执行另一个操作。If else语句的语法为:
if (表达式){
  语句1; //满足条件时要执行的语句
}else{
  语句2; //不满足条件时要执行的语句
}
如果表达式返回值为true,那么执行语句1部分;否则将执行else对应的语句2。示例:
<?php
$username="admin";
$userpass="admin";
$code="admin";
if ($username="admin" && $userpass="123456" && $code="U1F4"){
  echo "欢迎用户$username访问系统";
}else{
  echo "登录失败。请检查输入的用户名、密码和验证码是否正确。";
}
?>

3)多分支:

如果有多个分支情况,可以使用多分支if语句来完成,也就是说可以多个if else语句合并在一起使用,判断多种情况下的分支条件。多分支条件if语句的语法为:
if (表达式1){
  语句块1; //满足表达式1时执行的语句
} elseif(表达式2){
  语句块2; //满足表达式2时执行的语句
} elseif(表达式3){
  语句块3; //满足表达式3时执行的语句
}
……
else{
  语句块n2; //所以条件表达式都不满足时执行的语句
}
执行时,首先判断表达式1的返回值,如果为true,则执行语句块1,然后退出整个if elseif else语句,其他elseif和else部分都不被执行。而如果表达式1返回值为false,则执行第一个elseif判断表达式2的返回值是true还是false,如果为true则执行语句块2,然后退出整个if elseif else语句,其他elseif和else部分都不被执行。如果表达式2返回false,则执行第二个elseif判断表达式3的返回值,依次向下判断执行。

4)分支嵌套:

If语句用法非常灵活,不仅可以单独使用,还可以在if语句里嵌套另一个if语句。同样,if else语句中也可以嵌套另一个if else语句。
理论上,if嵌套语句可以解决几乎所有的分支,但为了程序更容易理解,不要嵌套太多,并且每个if语句用大括号{}括起来。If语句的嵌套语法格式为:
if (表达式1)
{
if (表达式2)
{
语句块1;
}
else
{
语句块2;
}
}
else
{
if (表达式3)
{
语句块3;
}
}
每一条else与离它最近且没有其他else对应的if相搭配。

5)多分支的另一种实现:

PHP语言像其他语言一样提供了switch语句。Switch语句是多分支语句,适用于判断多种情况,可以把switch语句看作是if elseif else语句的另一种实现方式,如果需要比较有很多值的变量,通常会使用switch语句。Switch语句的语法为:
switch (表达式){
  case case1: statement1;
  case case2: statement2;
  case case3: statement3;
  ……
  default: statement4;
}
在执行switch语句时,表达式的值分别与case1、case2、case3等表达式比较,根据比较结果执行对应的statement语句。首先与case1比较,如果与case1相等,执行statement1;否则继续向下比较,如果与case2相等,执行statement2。直到所有表达式都比较完成了,如果还没有找到相等的,则使用default部分。示例:
<?php
function Operate($number1,$number2,$op)
{
switch ($op)
{
case "+":
$result=$number+$number2;
break;
case "-":
$result=$number-$number2;
break;
case "*":
$result=$number*$number2;
break;
case "/":
$result=$number/$number2;
break;
}
echo "$number $op $number2=$result \n";
Operate(5,2,"+");
Operate(5,2,"/");
}
?>

3.循环结构:

循环是重复一段代码直到满足特定条件为止,所有流行的编程语言都定有循环结构,PHP中的循环语句与C和Java中的循环语句相似。

1)while语句:

While是PHP中实现循环的最简单语句,需要一个表达式以及一个循环执行的语句块,只要表达式为true则一直执行语句块,直到表达式为false时结束。语法格式为:
while (表达式) {
语句块; //此处为要循环执行的语句块
}
执行while循环时,首先判断条件表达式的值,如果值为true则执行while中的语句块。执行完语句块的所有语句之后,再次判断表达式的值是否为true,如果为false则退出while循环,如果为true继续执行和判断,如此循环。
使用while语句时要注意,表达式的值是在每次开始循环时检查,所以即使在语句块中该值改变了,语句也不会停止执行,直到本次循环结束。如果while表达式的值一开始就是false,则循环语句一次都不会执行。
While的循环语句块也可以不使用大括号{}括起来,而是使用冒号(:)和endwhile语句来代替。其中,冒号表示循环体的开始位置,endwhile表示while循环体的结束位置。示例:
while ($number<101):
  if ($number%13==0)
echo "$number \t";
$number++;
Endwhile;

2)Do while语句:

Do while是while的一种变化形式,它会先执行循环体再判断条件表达式。语法格式:
 do  {
语句块; //此处为要循环执行的语句块
}while(表达式);
Do while在语句块的结束处来验证循环条件表达式。在执行循环时,首先执行一次语句块部分,然后判断循环表达式的值,如果为true则再次执行循环;如果为false则退出do while循环。Do while中的语句至少被执行一次。

3)For语句:

For语句适合用于一个语句块重复执行预定次数的循环。For语句是在程序执行前判断条件表达式是否满足,如果值为false,那么循环语句根本就不会执行。语法格式为:
for (表达式1; 表达式2; 表达式3) {
语句块; //循环执行的语句块
}
For语句中3个表达式的含义如下:
·表达式1:初始化表达式,用于完成变量的初始化
·表达式2:循环条件表达式,值为布尔类型的表达式,表示循环条件
·表达式3:循环后操作表达式,用于调整变量的值,改变循环条件
在执行for循环时,首先执行表达式1完成变量的初始化;下一步判断表达式2的值,若表达式2的值为true,则执行语句块部分。在执行完循环体后接着计算表达式3,这部分通常是增加或者减少循环控制变量的一个表达式。第一轮循环结束后,第二轮循环从计算表达式2开始,若表达式2返回true,则继续循环,否则跳出整个for循环语句。
For语句中的3个表达式并不是必须存在的,可以部分为空,甚至可以全部为空。
①表达式1为空:
For语句表达式的作用是初始化循环变量,可以在程序的其他位置给出。示例:
<?php
$result=0;
$number=1; //相当于for语句的第一个表达式
for (; $number<101; $number++) {
  if ($number%2!=0)  $result+=$number;
}
echo "100以内所有奇数和为:".$result;
?>
②表达式2为空:
当for语句中表达式2为空时,将没有循环的终止条件,循环无限制执行下去。为了使循环达到某种条件时退出,需要在语句块中进行逻辑判断,并使用break语句跳出循环,否则将产生死循环。示例:
<?php
$result=0;
for ($number=1;; $number++) {
  if ($number>100) break; //相当于for语句的表达式2,满足时就退出for循环
  if ($number%2!=0) $result+=$number;
}
echo "100以内所有奇数和为:".$result;
?>
③表达式3为空:
当在for语句中表达式3为空时,就没有设置控制的表达式,即每次循环之后无法改变变量的值,也无法保证循环正常结束。示例:
<?php
$result=0;
for ($number=1; $number>100 ; ) {
  if ($number%2!=0) $result+=$number;
  $number++; //相当于for语句的表达式3,每次递增1
}
echo "100以内所有奇数和为:".$result;
?>
④3个表达式都为空:
当for语句中循环体全为空时没有循环初值,不判断循环条件,循环变量不增值,此时无条件执行循环体,形成无限循环。示例:
<?php
$result=0;
$number=1; //相当于for语句的第一个表达式
for (; ; )
{
  if ($number>100) break; //相当于for语句的表达式2
  if ($number%2!=0) $result+=$number;
  $number++; //相当于for语句的表达式3
}
echo "100以内所有奇数和为:".$result;
?>
⑤For语句的嵌套:
For语句也可以实现嵌套。示例:输出一个等腰三角形
<?php
$max=5;
for ($temp=0; $temp<=$max; $temp++) {
  for ($temp2=0; $temp2<=$max-$temp; $temp2++)  echo " ";
  for ($temp3=0; $temp3<=$temp*2; $temp3++)  echo "*";
  echo "\n"; //输出换行符
}
?>

5)Foreach语句:

Foreach语句主要用于执行遍历,可以从数组中提取每个“键/值”对,直到获取所有项,或者满足某些内部条件为止。Foreach语句有两种语法形式,第一种最简单:
foreach (数组变量 as 遍历变量) {
  语句块;
}
用于从数组中获取每个值,每次迭代都将指针后移。示例:
<?php
$keys=array("php", "perl", "python", "apache", "mysql"); //创建数组
echo “热门关键字:”;
foreach ($keys as $key) //使用$key变量遍历数组
 {
  echo "$key  "; //输出$key变量的值
}
?>
Foreach循环语句的第二种形式适合处理包含键和值的数组。语法为:
foreach (数组变量 as 键变量=>值变量) {
  语句块;
}
示例:数组中保存了用户选择的商品信息
<?php
$carts=array(
"10"=>"男士专用",
"11"=>"混搭经典",
"15"=>"数码产品",
"28"=>"太阳镜",
); //保存商品信息的数组
echo "当前购物车中有如下宝贝:<br />";
foreach ($carts as $id=>$name) //遍历数组
{
  echo "宝贝编号:$id        宝贝名称:$name <br />"; //输出键名和键值
}
?>

4.跳转结构:

跳转结构可以帮助程序员更加精确地控制程序流程,方便程序的设计,例如在遇到死循环时使用跳转结构结束循环。PHP提供了跳转控制语句return、break和continue。

1)return语句:

Return语句的作用就是退出循环,但是只能在函数内使用。此时不管当前循环有多少层嵌套,都会被终止,同时结束函数的运行。Return语句后面还可以跟一个表达式来指定函数的返回值。

2)break语句:

Break语句表示强制从当前的语句块(主要为循环语句)跳转出来,并执行语句块下面的语句。Break适用的语句有:for、foreach、while、do while和switch。
在循环嵌套中,内部循环中的break只能终止内部循环,而不是跳出所有循环。

3)Continue语句:

Continue语句表示退出当前的循环而执行下一次循环,适用于循环语句和switch语句。

4)try…catch…throw语句

使用户在程序中加入错误处理,如果try代码块中的任何代码抛出错误,控制会传递到catch块。语法格式为:
try {
  // 语句
} catch (exception $err) {
  // 语句
}
单个try代码块可以有多个catch代码块,并且用户可以根据需要嵌套任意层数的try代码块。catch处理函数中指定的参数$err必须是一个简单的标识符,例如e、theException或x等。
无论何时代码抛出一个错误,用户都可以编写自定义处理函数来适当地处理错误并执行相应的动作。示例:
<?php
$n1=7;
$n2=0;
try {
  if ($n2==0) {
throw new Exception("0不能作为被除数");
   }
} catch (Exception $err) {
  echo $err->getMessage();
  exit();
}
?>
上述代码,要计算$n1/$n2的值,如果$n2的值为0将抛出一个错误,catch代码块将捕获该错误,该错误会在网页中显示一条信息。
使用throw语句可以生成或抛出一个可由catch{}代码块处理或捕获的错误。

5)Goto语句:

Goto语句用来跳转到程序的某一指定位置,目标位置使用“目标名称+冒号”来标记。示例:
<?php
goto a;
echo 'AAAAAA';

a:
echo 'BBBBBB';
}
?>
Goto语句只能在同一个文件和作用域中使用,也就是无法跳出一个函数或类方法,也无法跳入另一个函数,也无法跳入到任何循环或者switch结构中。常见的用法是用来跳出循环或者switch,可以代替多层的break。示例:
<?php
for ($i=0,$j=50;$i<100;$i++) {
  while($j--) {
if($j==17) goto end;
  }
}
echo "i=$i"; // 这行代码不会被执行
end;
echo 'j hit 17';
?>

5.文件引用语句:

在程序编写中,为了提高代码的可重用性,通常会将一些公用的代码放到一个单独的文件中,然后根据需要使用包含语句将它们引入即可,例如数据库连接的账号、程序定义的常量、网页头部的导航栏和网页尾部的版权声明等。PHP提供了4个语句来实现文件引用。

1)include和include_once:

Include()语句将引用指定文件中的所有文本,并把文本复制到使用该语句所在的文件中。语法格式为:
bool include(string $filename)
这里的$filename表示要包含的文件名,如果文件已经被包含则返回true。当一个文件被包含时,其中所包含的代码继承了include所在行的变量范围。从该处开始,调用文件在该行处可用的任何变量在被调用的文件中也都可用,而且所有在包含文件中定义的函数和类都具有全局作用域。
寻找包含文件的顺序是:先在当前工作目录相对的include_path下寻找,然后在当前运行脚本所在目录相对的include_path下寻找。例如,文件中有一句include "file1.php",则寻找file1.php的顺序是先/www/,然后是/www/include/。如果文件名以“./”或者“../”开始,则只在当前工作目录相对的include_path下寻找。示例:
假设在网站根目录下的config.php文件中保存了用户的详细信息,像登录名称、密码、角色和登录时间等。具体文件内容如下:
<?php
$username="Administrator";
$userpass="********";
$userid=1;
$logintimes=49;
$role="超级管理员";
$lasttime="2012-08-25 20:45:59";
?>
为了将用户信息显示到当前的index.php文件中,首先需要引用config.php,然后直接调用其中的变量。而index.php中的部分代码为:
<?php include "config.php" ?>
<h1>用户信息管理 > 查询详细信息</h1>
<div style="padding:10px;font-size:14px;line-height:18px;">
  用户编号:<?=$userid?><br />
  用户名称:<?=$useriname?><br />
  登录密码:<?=$userpass?><br />
  所属角色:<?=$role?><br />
  登录次数:<?=$logintimes?><br />
  上次登录时间:<?=$lasttime?><br />
</div>
include_once()语句和include()语句类似,也用于包含文件。与include()不同的是,使用include_once()包含文件时,如果该文件中的代码已经被包含了,则不会被再次包含。使用include_once()语句可以确保它只被包含一次,从而避免出现函数重定义、变量重新赋值等问题。

2)Require和require_once:

Require()和include()除了处理失败的方式不同外,在各个方面都完全一样。Include()产生一个警告,而require()则导致一个致命错误。如果想在丢失文件时停止处理页面,应该使用require(),include()则会继续执行脚本。正因为在文件不存在或被重命名后脚本不会继续执行,因此推荐使用require()而不是include()。
require_once()语句和include_once()语句功能类似,它在包含文件之前也会先检查当前文件是否被包含过,如果该文件被包含了,则该文件就会被忽略,不会被再次包含。

Copyright@dwenzhao.cn All Rights Reserved   备案号:粤ICP备15026949号
联系邮箱:dwenzhao@163.com  QQ:1608288659