PHP Conference Japan 2024

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 is greater than b";
} else {
echo
"a is NOT greater than b";
}
?>
只有當 if 運算式評估為 false 時,才會執行 else 陳述式;如果有任何 elseif 運算式,也只有在它們評估為 false 時才會執行 else 陳述式(請參閱 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 年前
另一種非常有用的語法如下:

陳述式 ? 若為真則執行 : 若為假則執行

這對於字串內的動態輸出非常有用,例如:

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

如果 $b 大於 $a,將會印出 "$a is smaler than $b";如果 $a 較大,則印出 "$a is bigger than $b";如果它們相同,則印出 "$a is equal to $b"。
Caliban Darklock
20 年前
如果您來自另一種沒有 "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);| // 如果 ... 或 ... 或 ... 否則
$nospace=implode("",$list); // 如果 ... 或如果 ... 或如果 ... 否則
$start=array_sum(explode(" ",microtime()));
eval(
$space);
$end=array_sum(explode(" ",microtime()));
echo
$end-$start . " 秒\n";
$start=array_sum(explode(" ",microtime()));
eval(
$nospace);
$end=array_sum(explode(" ",microtime()));
echo
$end-$start . " 秒\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