条件结构

if 语句

条件结构用于控制哪些语句会被执行。它们由以下三个基本元素组成:

  1. if 语句;
  2. elseif 语句;
  3. else 语句。

PHP 中的条件结构与 C++ 和 Java 中的条件结构类似。其结构从 if 子句开始,if 后跟一个括号内的真/假表达式 ()。随后,代码会包含在由大括号 {} 表示的块中。有时,大括号会被省略,后面只会跟着一行代码。elseifelse 子句有时会在 if 子句后出现,用于测试不同的条件。

if 子句的意思是:“如果这个条件为真,我希望程序执行以下语句;如果条件为假,则忽略这些语句。” 从技术角度来说,它的工作原理如下:当遇到 if 语句时,会评估括号中的真/假表达式。如果表达式为真,则执行大括号中的代码块;如果为假,则跳过这些行并执行接下来的非空行。

if 子句后,有两个可选的子句:elseelseifelseif(或 else if)子句的意思是:“如果前一个条件为假,检查这个条件是否为真。如果为真,执行以下代码;如果不为真,则跳过它。” elseif 语句仅在前面的 if 语句为假时才会被评估,其他情况下会被跳过。除此之外,elseif 子句与常规的 if 子句类似,如果它为真,它的代码块会被执行,否则会跳过。

最后,else 子句充当“兜底”语句。实际上,else 语句的意思是:“如果所有前面的条件都失败,那么执行这段代码。”

示例 1

<?php
$foo = 1;
$bar = 2;
if ($foo == $bar) {
  echo "$foo is equal to $bar.";
} elseif ($foo > $bar) {
  echo "$foo is greater than $bar.";
} else {
  echo "$foo is less than $bar.";
}
?>

示例 2

<?php
$lower = 10;
$upper = 100;
$needle = 25;
if (($needle >= $lower) && ($needle <= $upper)) {
  echo "The needle is in the haystack.";
} elseif (($needle <= $lower) || ($needle >= $upper)) {
  echo "The needle is outside of the haystack.";
}
?>

条件表达式

条件值通过基本的形式逻辑来工作。理解 if 子句如何评估这些条件值是很重要的。

最简单的情况是考虑布尔值,也就是说,条件表达式的结果要么是 TRUE,要么是 FALSE,而不能同时为两者。例如,假设变量 $x = 4,并且调用一个条件结构,如 if ($x == 4),那么该表达式的结果为 TRUE,if 结构会被执行。如果表达式是 ($x == 0),则结果为 FALSE,代码不会执行。这个逻辑比较简单。

当考虑更复杂的表达式时,情况变得更加复杂。表达式可以通过 AND (&&) 或 OR (||) 操作符进行连接。

示例

我们有变量 $x$y

$x = 4;
$y = 8;

对于以下复杂表达式:

($x == 4 AND $y == 8)

结果是 TRUE,因为两个单独的表达式都为真。当表达式使用 AND 操作符连接时,两个条件都必须为真,整个表达式才为真。

同样:

($x == 4 OR $y == 8)

结果也是 TRUE,因为至少有一个表达式为真。当表达式使用 OR 操作符连接时,只要至少有一方为真,整个表达式就为真。

相反:

($x == 4 AND $y == 10)

这个表达式会返回 FALSE,因为整个表达式中至少有一个条件为假。

然而:

($x == 4 OR $y == 10)

这个表达式会返回 TRUE,因为至少有一个条件为真。

代码块

代码块是一个或多个语句或命令,它们包含在一对大括号 {} 中。代码块主要用于循环、条件语句和函数中。代码块可以嵌套在彼此内部,例如在函数内部的循环内的 if 语句。

如果在某个条件语句后没有用大括号括起来的代码块,只有紧接着的下一条语句会被执行。为了避免添加额外代码时出现问题,建议始终使用大括号来明确表示代码块的范围。

以下代码不能按预期工作:

if (FALSE)
  echo 'FALSE evaluates to true.';
  echo 'Who knew that FALSE was TRUE?';

第二条 echo 语句被执行了,尽管 if 条件为假。缺少大括号导致 if 语句只应用于第一条语句,而第二条语句无视 if 语句的结果直接被执行。

为避免这个问题,请确保在条件语句中始终使用大括号,即使只有一行代码需要执行。这样可以防止在添加额外行时发生上述错误。

修复后的代码:

if (FALSE) {
  echo 'FALSE evaluates to true.';
  echo 'Who knew that FALSE was TRUE?';
}

此时第二条 echo 语句永远不会被执行。

简写法

如果你在编写长句子时,有些部分是动态的,可以使用 if 语句来创建字符串。PHP 语法允许你在一行内使用以下简写语法:

$money = 535; # $

print 'I have' . ($money > 500 ? '' : 'n’t') . ' enough money.';

这段代码会“发现”我有足够的钱。真是好消息!

更多信息

Last modified: Thursday, 9 January 2025, 10:30 PM