elseif/else if

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

elseif,顾名思义,是 ifelse 的组合。与 else 一样,它扩展了 if 语句,在原始 if 表达式计算为 **false** 时执行不同的语句。但是,与 else 不同的是,只有当 elseif 条件表达式计算为 **true** 时,才会执行该替代表达式。例如,以下代码将显示 a 大于 ba 等于 ba 小于 b

<?php
if ($a > $b) {
echo
"a is bigger than b";
} elseif (
$a == $b) {
echo
"a is equal to b";
} else {
echo
"a is smaller than b";
}
?>

在一个 if 语句中可以包含多个 elseif。第一个(如果有)计算为 **true** 的 elseif 表达式将被执行。在 PHP 中,可以写 else if(两个词),其行为与 elseif(一个词)相同。语义略有不同(与 C 语言相同),但最终结果是完全相同的行为。

只有当前面的 if 表达式和任何前面的 elseif 表达式都计算为 **false**,并且当前 elseif 表达式计算为 **true** 时,才会执行 elseif 语句。

注意: 请注意,当使用花括号时,elseifelse if 的行为完全相同,如上面的示例所示。当使用冒号定义 if/elseif 条件时,需要使用单个单词的 elseif。如果将 else if 分成两个词,PHP 将会抛出解析错误。

<?php

/* 错误的方法: */
if ($a > $b):
echo
$a." is greater than ".$b;
else if (
$a == $b): // 无法编译。
echo "The above line causes a parse error.";
endif;


/* 正确的方法: */
if ($a > $b):
echo
$a." is greater than ".$b;
elseif (
$a == $b): // 注意单词的组合。
echo $a." equals ".$b;
else:
echo
$a." is neither greater than or equal to ".$b;
endif;

?>

添加笔记

用户贡献笔记 1 个笔记

-12
Vladimir Kornea
17 年前
解析器无法尽可能合理地处理混合使用替代 if 语法。

以下是非法的(应该是这样的)

<?
if($a)
echo $a;
else {
echo $c;
}
?>

这也是非法的(应该是这样的)

<?
if($a) {
echo $a;
}
else
echo $c;
endif;
?>

但是由于两种替代 if 语法不可互换,因此可以合理地预期解析器不会尝试使用一种风格的 else 语句匹配使用另一种风格的 if 语句。换句话说,可以预期这将起作用

<?
if($a)
echo $a;
if($b) {
echo $b;
}
else
echo $c;
endif;
?>

而不是得出结论,认为 else 语句是打算匹配 if($b) 语句(并出错),解析器可以将 else 语句匹配到与之共享语法的 if($a) 语句。

虽然可以理解 PHP 开发人员不认为这是一个错误,或者不认为这是一个值得他们花时间的错误,但 jsimlo 指出混合使用替代 if 语法可能会导致意想不到的结果,这是正确的。
To Top