流程控制:条件判断语句

一个完整的脚本程序应该由一系列语句构成。一条语句也许是一个赋值语句、一个条件判断、一个循环、一个函数调用、或者是什么也不做的空语句。语句通常使用分号结束,并且多个语句可使用花括号进行分组,当做一行语句。

在之前的章节中我们已经学习了赋值语句,这章我们开始学习 PHP 的流程控制

流程控制包括条件判断(ifelseelseif/else ifswitch)、循环(whiledo-whileforforeach)和中止循环(breakcontinuereturn)等。

下面我们来看看条件判断语句

条件判断语句允许程序按照不同的情况执行不同的动作。在PHP中有以下几种条件语句的组合:

  • if:如果条件为真,则执行if部分的代码;
  • if...else:如果条件为真,则执行if部分的代码;条件为假,则执行else部分的代码;
  • if...elseif...else:根据条件的不同执行不同的代码;
  • switch:根据结果执行符合条件的代码。

if语句

if语句用于只有当指定条件成立时执行的情况,示例代码如下:

<?php

// 1.条件判断语句

$value = 18;
$expression = $value > 9;
if($expression) {
    // $expression 值为true时执行该段代码
    echo '条件为真',"\n";
}

if...else语句

if...else语句用于当指定条件成立时执行一块代码,不成立时执行另一块代码的情况,示例代码如下:

<?php

$value = 8;
$expression = $value > 9;
if($expression) {
    // $expression 值为true时执行该段代码
    echo '条件为真',"\n";
} else {
    // $expression 值为false时执行该段代码
    echo '条件为假',"\n";
}
// 输出:条件为假

if...elseif...else语句

if...elseif...else语句用于在多个条件下分别执行不同代码块的情况,示例代码如下:

<?php

$age = 24;
$online = 4;
if($age < 18) {
    // ($age < 18) 条件成立时执行
    echo '该用户未成年!禁止注册游戏!',"\n";
} elseif ($age >= 18 && $online <= 3) {
    // ($age >= 18 && $online <= 3) 条件成立时执行
    echo '该用户已成年且在线时长小于3小时,给予注册',"\n";
} else {
    // 以上条件都不成立时执行
    echo '该用户在线时长超过三小时,禁止登录!',"\n";
}
// 输出:该用户在线时长超过三小时,禁止登录!

switch语句

switch语句用于有选择地执行不同的代码的情况,也适用于多个类似条件的if...elseif...else语句的替换。示例代码如下:

<?php

// switch 语句可以避免冗长的if...elseif代码块
$score = 78;
switch($score) {
    case $score < 60:
        echo '该生不及格!',"\n";
        break;
    case $score >= 60 && $score < 80:
        echo '该生成绩良好',"\n";
        break;
    case $score >= 80 && $score < 100:
        echo '该生成绩优秀!',"\n";
        break;
    default:
        echo '你考了满分!恭喜!',"\n";
}
// 输出:该生成绩良好

语法说明

从以上示例代码可以看出,if类语法都很简单。形如:(expression 表示条件表达式)

if(expression) 
    // 代码块

稍微复杂一点,加了一个条件不成立时的选择,形如:

if(expression)
    // 条件 expression 为真时执行
else
    // 条件 expression 不为真时执行

再复杂一点,多个条件限制,形如:

if(expression)
    // 条件 expression 为真时执行
elseif(expression2)
    // 条件 expression2 为真时执行
elseif(expression3)
    // 条件 expression3 为真时执行
else
    // 以上条件都不成立时执行

switch的语法稍显复杂,形如:

switch(value) {
    case label1:
        // 条件 value == label1 为真时执行
        break;
    case label2:
        // 条件 value == label2 为真时执行
        break;
    case label3:
        // 条件 value == label3 为真时执行
        break;
    default:
        // 以上条件都不符合时执行
}

其中value为与后面的case子句比较的表达式(通常是一个变量),value从上至下对每个case子句的条件label比较,如果条件为真,则执行该case子句,直到switch代码段结束或者遇到第一个break语句为止。 如果不在case的语句段的最后加上break的话,PHP 将继续向下执行。例如上方的switch示例代码改为下方代码,看看会输出什么:

<?php

$score = 78;
switch($score) {
    case $score < 60:
        echo '该生不及格!',"\n";
    case $score >= 60 && $score < 80:
        echo '该生成绩良好',"\n";
    case $score >= 80 && $score < 100:
        echo '该生成绩优秀!',"\n";
    default:
        echo '你考了满分!恭喜!',"\n";
}
/* 输出:
该生成绩良好
该生成绩优秀!
你考了满分!恭喜!
*/

当然我们还有一个default子句没讲到。default子句表示默认行为,即如果之前的条件中没有成立的(也没有被break中断),则执行default子句。default子句是可选的,一般在有默认值的情况下使用。


条件判断语句只有这些,示例代码都很简单,实际项目开发中会遇到很多复杂的情况,有时候很困难,但有时候也会很有趣!好的,接下来我们学习流程控制中的循环