文章教程

4.1.1if语句

9/17/2020 9:37:07 PM 人评论 次浏览

4.1 条件控制结构

条件控制结构用于实现分支结构程序设计,条件控制结构可以使用if…else语句或switch语句实现。

4.1.1 if语句

if语句的语法格式:

if(条件表达式){

语句块

}

说明:当语句块为单条语句时,可省略“{ }”。

功能:当条件表达式的值为真(TRUE)时,PHP 将执行语句块程序;否则PHP将忽略语句块执行if后面的语句,if语句程序流程图如图4-1所示。单个if语句的使用方法较为简单,这里不再给出具体示例程序。

figure_0066_0095
图4-1 if语句程序流程图

4.1.2 if…else语句

if…else语句的语法格式:

if(条件表达式){

语句块1

}else{

语句块2

}

说明:当语句块1或语句块2为单条语句时,可省略“{ }”。

功能:if…else条件控制语句与if语句功能类似。if…else语句的条件表达式值为真(TRUE)时,会执行if的本体语句(语句块1),而条件表达式值为假(FALSE)时,则执行else的本体语句(语句块2),if…else语句程序流程图如图4-2所示。

figure_0067_0096
图4-2 if…else语句程序流程图

例如,程序if_else1.php如下。

<?php

if(isset($_GET['userName'])){

$userName = $_GET['userName'];

}else{

$userName = "";

echo "请输入用户名<br/>";

}

if(isset($_GET['password'])){

$password = $_GET['password'];

}else{

$password = "";

echo "请输入密码<br/>";

}

if($userName=="admin"&&$password=="admin"){

echo "您输入的用户名和密码匹配!";

}else{

echo "您输入的用户名和密码不匹配!";

}

?>

打开浏览器后,如果在浏览器地址栏中输入“http://localhost/4/if_else1.php?userName=admin&password=admin”,回车后将看到如图 4-3 所示的执行结果。如果在浏览器地址栏中输入“http://localhost/4/if_else1.php”,回车后将看到如图4-4所示的执行结果。

figure_0067_0097
图4-3 if…else语句示例程序运行结果
figure_0067_0098
图4-4 if…else语句示例程序运行结果

在if…else语句中,如果某个if或else的本体语句只有一行代码,“{}”可以省略,但在实际编程过程中,为了提高代码的可读性和可维护性,不建议这样做。如下程序if_else2.php演示了多个if…else条件嵌套使用的用法。

<?php

if(isset($_GET['userName'])){

$userName = $_GET['userName'];

}else{

$userName = "";

echo "请输入用户名<br/>";

}

if(isset($_GET['password'])){

$password = $_GET['password'];

}else{

$password = "";

echo "请输入密码<br/>";

}

if($userName=="admin"&&$password=="admin"){

echo "您输入的用户名和密码匹配!<br/>";

}else{

if($userName!="admin"){

echo "用户名填写错误!<br/>";

}

if($password!="admin"){

echo "密码填写错误!";

}

}

?>

PHP还提供了关键字elseif。在条件语句中if条件表达式为假时,用它来测试后面的条件,例如,如下程序 elseif.php,如果在浏览器地址栏中输入“http://localhost/4/elseif.php”,回车后将看到如图4-5所示的执行结果。如果在浏览器地址栏中输入“http://localhost/4/elseif.php?score=78”,回车后将看到如图4-6所示的执行结果。

figure_0068_0099
图4-5 elseif示例程序运行结果
figure_0068_0100
图4-6 elseif示例程序运行结果

<?php

if(isset($_GET['score'])){

$score = $_GET['score'];

}else{

$score = -1;

echo "请输入成绩!<br/>";

}

if($score>=90&&$score<=100){

echo "成绩优秀!";

}elseif($score>=80&&$score<90){

echo "成绩良好!";

}elseif($score>=60&&$score<80){

echo "成绩及格!";

}elseif($score>=0){

echo "成绩不及格!";

}

?>

4.1.3 switch语句

switch语句的语法格式:

switch(表达式){

case 值1:

语句块1

break;

case值2:

语句块2

break;

default:

语句块n;

}

功能:当程序执行碰到switch语句时,它会计算表达式的值(该表达式的值不能为数组或对象),然后与switch语句中case子句所列出的值逐一进行“==”比较(两个等号的比较),如有匹配,那么与case子句相连的语句块将被执行,直到遇到 break 语句时才跳离当前的switch语句;如果没有匹配,default语句将被执行(default语句在switch语句中不是必需的)。switch语句程序流程图如图4-7所示。例如,程序switch1.php如下。

figure_0069_0101
图4-7 switch语句程序流程图

<?php

switch (date("D")) {

case "Mon":

echo "今天星期一<br/>";

break;

case "Tue":

echo "今天星期二<br/>";

break;

case "Wed":

echo "今天星期三<br/>";

break;

case "Thu":

echo "今天星期四<br/>";

break;

case "Fri":

echo "今天星期五<br/>";

break;

default:

echo "今天放假<br/>";

}

?>

程序switch1.php的功能为打印今天是星期几,程序中使用了date("D")函数计算今天是星期几。如果当前时间为星期一,switch1.php程序的运行结果如图4-8所示。从程序switch1.php的运行结果可以看出,break语句的作用是跳离当前的switch语句,防止进入下一个case语句或default语句。

如果某个case语句中省略了break语句,程序有可能会导致功能混乱,例如程序switch2.php如下。

<?php

switch (date("D")) {

case "Mon":

echo "今天星期一<br/>";

case "Tue":

echo "今天星期二<br/>";

case "Wed":

echo "今天星期三<br/>";

case "Thu":

echo "今天星期四<br/>";

case "Fri":

echo "今天星期五<br/>";

default:

echo "今天放假<br/>";

}

?>

figure_0070_0102
图4-8 switch语句示例程序运行结果

程序switch2.php的运行结果如图4-9所示。由于date("D")函数产生的值为" Mon",switch语句将从语句“echo "今天星期一<br/>";”处开始执行,直到遇到break语句,才会跳出switch语句,这样switch就运行了switch2.php程序后面的所有case语句和default语句。

figure_0070_0103
图4-9 break的错误用法运行结果

条件控制语句中,if和switch语句实现相同的功能,这两个语句之间可以相互替换。但考虑到程序的可读性,一般而言,当程序中条件分支较少时,用if语句程序看起来较为直观;当程序中条件分支较多时,可以选择switch语句。

教程类别