else

(PHP 4, PHP 5, PHP 7, PHP 8)

通常,您希望在满足特定条件时执行一条语句,而在条件不满足时执行另一条语句。这就是 else 的作用。 else 扩展了 if 语句,以在 if 语句中的表达式计算为 **false** 时执行一条语句。例如,以下代码将在 $a 大于 $b 时显示 a 大于 b,否则显示 a 不大于 b

<?php
if ($a > $b) {
echo
"a 大于 b";
} else {
echo
"a 不大于 b";
}
?>
只有当 if 表达式计算为 **false** 时,才会执行 else 语句,如果存在任何 elseif 表达式 - 只有当它们也计算为 **false** 时才会执行(参见 elseif)。

注意: **悬空 else**

在嵌套 if-else 语句的情况下,else 始终与最近的 if 相关联。

<?php
$a
= false;
$b = true;
if (
$a)
if (
$b)
echo
"b";
else
echo
"c";
?>
尽管缩进(这对 PHP 无关紧要),但 elseif ($b) 相关联,因此该示例不会产生任何输出。虽然依赖这种行为是有效的,但建议通过使用大括号来避免这种行为,以解决潜在的歧义。

添加注释

用户贡献的注释 2 个注释

dormeydo at gmail dot com
16 年前
以下是一种替代且非常有用的语法

statement ? execute if true : execute if false

这对字符串中的动态输出非常有用,例如

print('$a is ' . ($a > $b ? 'bigger than' : ($a == $b ? 'equal to' : 'smaler than' )) . ' $b');

如果 $b 大于 $a,则这将打印 "$a is smaler than $b",如果 $a 比 $b 大则打印 "$a is bigger than $b",如果它们相同则打印 "$a is equal to $b"。
Caliban Darklock
19 年前
如果您来自没有“elseif”构造的另一种语言(例如 C++),那么认识到“else if”是嵌套的语言构造,“elseif”是线性的语言构造非常重要;它们的性能可能与递归循环相比与迭代循环相当。

<?php
$limit
=1000;
for(
$idx=0;$idx<$limit;$idx++)
{
$list[]="if(false) echo \"$idx;\n\"; else"; }
$list[]=" echo \"$idx\n\";";
$space=implode(" ",$list);| // if ... else if ... else
$nospace=implode("",$list); // if ... elseif ... else
$start=array_sum(explode(" ",microtime()));
eval(
$space);
$end=array_sum(explode(" ",microtime()));
echo
$end-$start . " seconds\n";
$start=array_sum(explode(" ",microtime()));
eval(
$nospace);
$end=array_sum(explode(" ",microtime()));
echo
$end-$start . " seconds\n";
?>

此测试应显示“elseif”的执行时间大约是“else if”的三分之二。(增加 $limit 最终也会导致解析器堆栈溢出错误,但发生这种情况的级别在现实世界中是荒谬的。没有人会正常地将 if() 块嵌套到超过一千个级别,除非他们试图破坏东西,这是一个完全不同的问题。)

仍然需要“else if”,因为您可能在阶梯的某个环节处需要执行其他无条件的代码;“else if”构造允许将此无条件代码优雅地插入整个过程的前面或后面。考虑以下 elseif() 阶梯

<?php
if($a) { conditional1(); }
elseif(
$b) { conditional2(); }
elseif(
$c) { conditional3(); }
elseif(
$d) { conditional4(); }
elseif(
$e) { conditional5(); }
elseif(
$f) { conditional6(); }
elseif(
$g) { conditional7(); }
elseif(
$h) { conditional8(); }
else {
conditional9(); }
?>

要为 $e 及其后的部分插入无条件的预处理代码,只需拆分“elseif”

<?php
if($a) { conditional1(); }
elseif(
$b) { conditional2(); }
elseif(
$c) { conditional3(); }
elseif(
$d) { conditional4(); }
else {
....
unconditional();
....if(
$e) { conditional5(); }
....elseif(
$f) { conditional6(); }
....elseif(
$g) { conditional7(); }
....elseif(
$h) { conditional8(); }
....else {
conditional9(); }
}
?>

另一种方法是在整个构造中复制无条件代码。
To Top