PHP编程
条件结构
if
语句
条件结构用于控制哪些语句会被执行。它们由以下三个基本元素组成:
if
语句;elseif
语句;else
语句。
PHP 中的条件结构与 C++ 和 Java 中的条件结构类似。其结构从 if
子句开始,if
后跟一个括号内的真/假表达式 ()
。随后,代码会包含在由大括号 {}
表示的块中。有时,大括号会被省略,后面只会跟着一行代码。elseif
和 else
子句有时会在 if
子句后出现,用于测试不同的条件。
if
子句的意思是:“如果这个条件为真,我希望程序执行以下语句;如果条件为假,则忽略这些语句。” 从技术角度来说,它的工作原理如下:当遇到 if
语句时,会评估括号中的真/假表达式。如果表达式为真,则执行大括号中的代码块;如果为假,则跳过这些行并执行接下来的非空行。
在 if
子句后,有两个可选的子句:else
和 elseif
。elseif
(或 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.';
这段代码会“发现”我有足够的钱。真是好消息!