4.1 条件控制结构
条件控制结构用于实现分支结构程序设计,条件控制结构可以使用if…else语句或switch语句实现。
4.1.1 if语句
if语句的语法格式:
if(条件表达式){
语句块
}
说明:当语句块为单条语句时,可省略“{ }”。
功能:当条件表达式的值为真(TRUE)时,PHP 将执行语句块程序;否则PHP将忽略语句块执行if后面的语句,if语句程序流程图如图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所示。
例如,程序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所示的执行结果。
在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所示的执行结果。
<?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如下。
<?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/>";
}
?>
程序switch2.php的运行结果如图4-9所示。由于date("D")函数产生的值为" Mon",switch语句将从语句“echo "今天星期一<br/>";”处开始执行,直到遇到break语句,才会跳出switch语句,这样switch就运行了switch2.php程序后面的所有case语句和default语句。
条件控制语句中,if和switch语句实现相同的功能,这两个语句之间可以相互替换。但考虑到程序的可读性,一般而言,当程序中条件分支较少时,用if语句程序看起来较为直观;当程序中条件分支较多时,可以选择switch语句。
共有条评论 网友评论