跳轉到內容

PHP 程式設計/if 結構

來自華夏公益教科書,自由的教科書

條件結構

[編輯 | 編輯原始碼]

if語句

[編輯 | 編輯原始碼]

條件結構 用於控制執行哪些語句。它們由三個基本元素組成

  • if語句;
  • elseif語句;以及
  • if else語句。

PHP 中的條件語句結構類似於 C++Java 中的條件語句結構。結構以一個if子句開頭,該子句由單詞 “if” 後跟一個/語句,該語句包含在圓括號中( )。隨後的程式碼將包含在一個塊中,該塊由花括號表示{ }。有時括號會被省略,並且只有一行程式碼會出現在if語句之後。elseif以及else子句有時會在if子句之後出現,以測試不同的語句。

if子句表示 “如果此語句為真,我希望程式執行以下語句。如果為假,則忽略這些語句”。在技術上,它的工作原理如下:當遇到一個if語句時,該/語句中的圓括號內的語句會被求值。如果發現語句為真,則會執行包含在花括號中的隨後的程式碼塊。但是,如果發現語句為假,則程式會跳過這些行並執行下一行非空行。

if子句之後是兩個可選子句else以及elseif。該elseif(或else if)子句表示 “如果上一個語句為假,讓我們看看,如果此語句為真。如果是,則執行以下程式碼。如果不是,則跳過它”。elseif語句僅在前面的if語句結果為假時才會被求值。否則,它們會被跳過。除此之外,elseif子句的工作原理與普通if子句相同。如果為真,則執行其塊,如果為假,則跳過其塊。

最後,該else子句作為對一個if語句的 “兜底”。實際上,else語句表示 “如果前面所有的測試都失敗,則執行此程式碼”。

<?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.";
}
?>
<?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.';
此程式碼使用簡寫語法在同一行內。


程式碼 “發現” 我有足夠的錢。這是一個好訊息!

更多資訊


PHP 手冊:控制結構。
華夏公益教科書