PHP条件控制语句

If语句

if语句的基本流程控制图

if语句的流程控制可以通过简单的流程图表示,描述条件判断和分支执行的逻辑。

开始
  │
  ▼
[条件判断]───真───> [执行语句块]───> [结束]
  │
  └─假───────> [跳过或执行else块]───> [结束]

单分支if语句流程

单分支if语句仅包含一个条件判断和一个执行块。

开始
  │
  ▼
[条件为真?]──是──> [执行代码块]───> [继续后续代码]
  │
  └─否───────> [跳过代码块]─────> [继续后续代码]

双分支if-else流程

if-else语句在条件不满足时执行else块。

开始
  │
  ▼
[条件为真?]──是──> [执行if块]───────> [继续后续代码]
  │
  └─否───────> [执行else块]──────> [继续后续代码]

多分支else-if流程

多个条件通过else-if链式判断,直到满足条件或执行默认else。

开始
  │
  ▼
[条件1为真?]──是──> [执行块1]───────> [继续后续代码]
  │
  └─否───────> [条件2为真?]──是──> [执行块2]───> [继续后续代码]
                │
                └─否───────> [执行else块]───> [继续后续代码]

嵌套if语句流程

嵌套if语句在某个分支内进一步进行条件判断。

开始
  │
  ▼
[外层条件为真?]──是──> [内层条件为真?]──是──> [执行嵌套块]
  │                     │
  │                     └─否───────> [执行其他块]
  │
  └─否───────> [跳过嵌套结构]─────> [继续后续代码]

关键说明

  • 条件判断:必须为布尔表达式(True/False)。
  • 代码块:缩进部分表示条件满足时执行的语句。
  • 流程终止:未满足任何条件时可能跳过所有分支或执行默认else。

通过流程图可以清晰理解if语句的分支逻辑和代码执行路径。

If…else语句

If...else 语句的基本结构

If...else 语句是编程中用于条件判断的核心结构,根据条件的真假执行不同的代码块。

if condition:
    # 条件为真时执行的代码
else:
    # 条件为假时执行的代码

单条件判断

最简单的形式是仅使用 if,适用于只需处理条件为真时的情况。

x = 10
if x > 5:
    print("x 大于 5")

双分支条件

通过 if...else 处理两种对立情况,条件为假时执行 else 块。

age = 18
if age >= 18:
    print("已成年")
else:
    print("未成年")

多条件判断(elif)

使用 elif 实现多重条件检查,适用于需要处理多个互斥条件的情况。

score = 85
if score >= 90:
    print("A")
elif score >= 80:
    print("B")
elif score >= 60:
    print("C")
else:
    print("D")

嵌套条件

在条件块内部嵌套其他 if...else 语句,用于处理更复杂的逻辑。

num = 15
if num > 0:
    if num % 2 == 0:
        print("正偶数")
    else:
        print("正奇数")
else:
    print("非正数")

三元表达式

简化版的 if...else,适合短小的条件赋值操作。

x = 10
result = "大于5" if x > 5 else "小于等于5"
print(result)  # 输出:大于5

空值合并与默认值

通过 if...else 提供变量为空时的默认值。

name = None
display_name = name if name else "匿名用户"
print(display_name)  # 输出:匿名用户

逻辑运算符结合

利用 andor 等逻辑运算符简化多条件判断。

username = "admin"
password = "123456"
if username == "admin" and password == "123456":
    print("登录成功")
else:
    print("登录失败")

注意事项

  • 条件表达式需返回布尔值(True/False),或可隐式转换为布尔值的对象(如非空列表、非零数字等)。
  • elifelse 是可选的,但必须以 if 开头。
  • 代码块通过缩进(通常为4个空格)界定,同一代码块内缩进必须一致。

Elseif语句

语法结构

elseif语句用于在多个条件分支中进行选择,是ifelse的扩展形式。其基本语法如下:

if (condition1) {
    // 条件1为真时执行
} elseif (condition2) {
    // 条件2为真时执行
} else {
    // 所有条件均为假时执行
}

执行逻辑

  • if的条件(condition1)为真时,执行对应的代码块,跳过后续elseifelse
  • if条件为假,则检查下一个elseif的条件(condition2),为真时执行其代码块。
  • 所有条件均不满足时,执行else块(如果存在)。

使用示例

检查变量值的范围:

$score = 85;
if ($score >= 90) {
    echo "优秀";
} elseif ($score >= 80) {
    echo "良好";  // 输出"良好"
} elseif ($score >= 60) {
    echo "及格";
} else {
    echo "不及格";
}

注意事项

  • elseif可连续使用多个,但需按逻辑顺序排列(如从大到小或从小到大)。
  • 在PHP中,elseifelse if完全等价,但推荐使用elseif以保持一致性。
  • 避免嵌套过深,超过3层时可考虑改用switch或重构代码。

switch对比

elseif适合范围判断或复杂条件,而switch更适合单一变量的离散值匹配:

// 使用switch实现相同逻辑
switch (true) {
    case ($score >= 90):
        echo "优秀";
        break;
    case ($score >= 80):
        echo "良好";
        break;
    // 其他case...
}

Switch…case多重判断语句

switch...case 语句的基本语法

switch...case 是一种多分支条件判断结构,适用于对一个变量或表达式进行多重判断的场景。其基本语法如下:

switch (expression) {
    case constant1:
        // 代码块1
        break;
    case constant2:
        // 代码块2
        break;
    ...
    default:
        // 默认代码块
}

switch...case 的工作原理

  • expression:需要被判断的变量或表达式,其值会与每个 case 后的常量进行比较。
  • case constant:每个 case 后跟一个常量,用于与 expression 的值进行匹配。
  • break:用于终止当前 case 的执行,防止代码继续执行下一个 case。
  • default:当所有 case 都不匹配时,执行 default 代码块(可选)。

示例代码

以下是一个简单的示例,演示如何使用 switch...case 语句判断一周中的某一天:

#include <stdio.h>

int main() {
    int day = 3;
    switch (day) {
        case 1:
            printf("Monday\n");
            break;
        case 2:
            printf("Tuesday\n");
            break;
        case 3:
            printf("Wednesday\n");
            break;
        case 4:
            printf("Thursday\n");
            break;
        case 5:
            printf("Friday\n");
            break;
        case 6:
            printf("Saturday\n");
            break;
        case 7:
            printf("Sunday\n");
            break;
        default:
            printf("Invalid day\n");
    }
    return 0;
}

注意事项

  • break 的重要性:如果省略 break,程序会继续执行下一个 case 的代码块,直到遇到 break 或 switch 语句结束。
  • case 常量的唯一性:每个 case 后的常量必须是唯一的,不能重复。
  • expression 的类型限制:expression 必须是整型或枚举类型(如 int、char),不能是浮点型或字符串。

多个 case 共享代码块

如果有多个 case 需要执行相同的代码块,可以将它们合并:

switch (grade) {
    case 'A':
    case 'B':
    case 'C':
        printf("Pass\n");
        break;
    case 'D':
    case 'F':
        printf("Fail\n");
        break;
    default:
        printf("Invalid grade\n");
}

switch...case 与 if...else 的比较

  • 适用场景:switch...case 适用于对单一变量进行多重等值判断,if...else 适用于更复杂的条件判断(如范围判断、逻辑运算等)。
  • 性能:switch...case 通常比多重 if...else 更高效,因为编译器可能对其进行优化(如跳转表)。
  • 可读性:switch...case 在多重判断时结构更清晰,代码更简洁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值