跳转到内容

PHP 编程/if 结构

来自维基教科书,自由的教科书

条件结构

[编辑 | 编辑源代码]

if语句

[编辑 | 编辑源代码]

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

  • if语句;
  • elseif语句;以及
  • if else语句。

PHP 中的条件语句结构类似于 C++Java 中的条件语句结构。结构以一个if子句开头,该子句由单词 “if” 后跟一个/语句,该语句包含在圆括号中( )。随后的代码将包含在一个块中,该块由花括号表示{ }。有时括号会被省略,并且只有一行代码会出现在if语句之后。elseif以及else子句有时会在if子句之后出现,以测试不同的语句。

if子句表示 “如果此语句为真,我希望程序执行以下语句。如果为假,则忽略这些语句”。在技术上,它的工作原理如下:当遇到一个if语句时,该/语句中的圆括号内的语句会被求值。如果发现语句为真,则会执行包含在花括号中的随后的代码块。但是,如果发现语句为假,则程序会跳过这些行并执行下一行非空行。

if子句之后是两个可选子句else以及elseif。该elseif(或else if)子句表示 “如果上一个语句为假,让我们看看,如果此语句为真。如果是,则执行以下代码。如果不是,则跳过它”。elseif语句仅在前面的if语句结果为假时才会被求值。否则,它们会被跳过。除此之外,elseif子句的工作原理与普通if子句相同。如果为真,则执行其块,如果为假,则跳过其块。

最后,该else子句作为对一个if语句的 “兜底”。实际上,else语句表示 “如果前面所有的测试都失败,则执行此代码”。

<?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.";
}
?>
<?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.';
此代码使用简写语法在同一行内。


代码 “发现” 我有足够的钱。这是一个好消息!

更多信息


PHP 手册:控制结构。
华夏公益教科书