另一种非常有用的语法如下所示
statement ? 如果为真则执行 : 如果为假则执行
这对于字符串内的动态输出非常有用,例如
print('$a is ' . ($a > $b ? 'bigger than' : ($a == $b ? 'equal to' : 'smaler than' )) . ' $b');
如果 $b 大于 $a,则这将打印“$a 小于 $b”;如果 $a 更大,则打印“$a 大于 $b”;如果它们相同,则打印“$a 等于 $b”。
(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";
}
?>
else
语句仅在 if
表达式计算结果为false
时执行,如果存在任何 elseif
表达式,则只有在它们也计算结果为false
时才执行(参见 elseif)。
注意:悬空 else
对于嵌套的
if
-else
语句,else
始终与最近的if
关联。尽管进行了缩进(这对 PHP 无关紧要),但<?php
$a = false;
$b = true;
if ($a)
if ($b)
echo "b";
else
echo "c";
?>else
与if ($b)
关联,因此此示例不会产生任何输出。虽然依赖此行为是有效的,但建议避免它,可以使用花括号来解决潜在的歧义。
另一种非常有用的语法如下所示
statement ? 如果为真则执行 : 如果为假则执行
这对于字符串内的动态输出非常有用,例如
print('$a is ' . ($a > $b ? 'bigger than' : ($a == $b ? 'equal to' : 'smaler than' )) . ' $b');
如果 $b 大于 $a,则这将打印“$a 小于 $b”;如果 $a 更大,则打印“$a 大于 $b”;如果它们相同,则打印“$a 等于 $b”。
如果您来自没有“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(); }
}
?>
另一种方法是在整个结构中复制无条件代码。