7.控制敘述

控制敘述

if

     if 結構是很多語言包括 PHP 在內最重要的特性之一,它允許按照條件執行代碼片段。
     PHP 的 if 結構和 C 語言相似:

        <?php
        if (expression)
        statement
        ?>
   
      如同在表達式一章中定義的,expression 按照布爾求值。

       1. 如果 expression 的值為 TRUE,PHP 將執行 statement。
       2. 如果值為 FALSE - 將忽略 statement。

      如果 $a 大於 $b,則以下例子將顯示 a is bigger than b:

      <?php
        if ($a > $b)
        echo "a is bigger than b";
        ?>    
      
     經常需要按照條件執行不止一條語句,當然並不需要給每條語句都加上一個 if 子句。
     可以將這些語句放入語句組中。例如,如果 $a 大於 $b,以下代碼將顯示 a is bigger than b 並且將 $a 的值賦給 $b:

        <?php
        if ($a > $b) {
        echo "a is bigger than b";
        $b = $a;
        }
        ?>
            if 語句可以無限層地嵌套在其它 if 語句中,這給程序的不同部分的條件執行提供了充分的彈性。

else

     經常需要在滿足某個條件時執行一條語句,而在不滿足該條件時執行其它語句,這正是 else 的功能。else 延伸了 if 語句,可以在 if 語句中的表達式的值為 FALSE 時執行語句。例如以下代碼在 $a 大於 $b 時顯示 a is bigger than b,反之則顯示 a is NOT bigger than b:

            <?php
            if ($a > $b) {
            echo "a is bigger than b";
            } else {
            echo "a is NOT bigger than b";
            }
            ?>
        

     else 語句僅在 if 以及 elseif(如果有的話)語句中的表達式的值為 FALSE 時執行。


elseif

     elseif,和此名稱暗示的一樣,是 if 和 else 的組合。和 else 一樣,它延伸了 if 語句,可以在原來的 if 表達式值為 FALSE 時執行不同語句。但是和 else 不一樣的是,它僅在 elseif 的條件表達式值為 TRUE 時執行語句。
     例如以下代碼將根據條件分別顯示 a is bigger than b,a equal to b 或者 a is smaller than 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」(一個單詞)的行為完全一樣。

switch

     switch 語句和具有同樣表達式的一系列的 IF 語句相似。很多場合下需要把同一個變量(或表達式)與很多不同的值比較,並根據它等於哪個值來執行不同的代碼。這正是 switch 語句的用途。
     注意和其它語言不同,continue 語句作用到 switch 上的作用類似於 break。如果在循環中有一個 switch 並希望 continue 到外層循環中的下一個輪迴,用 continue 2。

     下面兩個例子使用兩種不同方法實現同樣的事,一個用一系列的 if 語句,另一個用 switch 語句:
     switch 結構

         <?php
        if ($i == 0) {
        echo "i equals 0";
        } elseif ($i == 1) {
        echo "i equals 1";
        } elseif ($i == 2) {
        echo "i equals 2";
        }
        switch ($i) {
        case 0:
        echo "i equals 0";
        break;
        case 1:
        echo "i equals 1";
        break;
        case 2:
        echo "i equals 2";
        break;
        }
        ?>
        
       switch 結構可以用字符串
       <?php
        switch ($i) {
        case "apple":
        echo "i is apple";
        break;
        case "bar":
        echo "i is bar";
        break;
        case "cake":
        echo "i is cake";
        break;
        }
        ?>
        

     為避免錯誤,理解 switch 是怎樣執行的非常重要。
     在 switch 語句中條件只求值一次並用來和每個 case 語句比較。在 elseif 語句中條件會再次求值。如果條件比一個簡單的比較要複 雜得多或者在一個很多次的循環中,那麼用 switch 語句可能會快一些。

在一個 case 中的語句也可以為空,這樣只不過將控制轉移到了下一個 case 中的語句。

        <?php
        switch ($i) {
        case 0:
        case 1:
        case 2:
        echo "i is less than 3 but not negative";
        break;
        case 3:
        echo "i is 3";
        }
        ?>
        
         一個 case 的特例是 default。它匹配了任何和其它 case 都不匹配的情況,並且應該是最後一條 case 語句。例如:

        <?php
        switch ($i) {
        case 0:
        echo "i equals 0";
        break;
        case 1:
        echo "i equals 1";
        break;
        case 2:
        echo "i equals 2";
        break;
        default:
        echo "i is not equal to 0, 1 or 2";
        }
        ?>
        

while

     while 循環是 PHP 中最簡單的循環類型。它和 C 語言中的 while 表現得一樣。while 語句的基本格式是:

    while (expr)
        statement
        
  while 語句的含意很簡單,它告訴 PHP 只要 while 表達式的值為 TRUE 就重複執行嵌套中的循環語句。

       1. 表達式的值在每次開始循環時檢查,所以即使這個值在循環語句中改變了,語句也不會停止執行,直到本次循環結束。
       2. 有時候如果 while 表達式的值一開始就是 FALSE,則循環語句一次都不會執行。

     和 if 語句一樣,可以在 while 循環中用花括號括起一個語句組,或者用替代語法:

      while (expr):
        statement
        ...
       endwhile;
  
     下面兩個例子完全一樣,都顯示數字 1 到 10:

         <?php
        /* example 1 */
        $i = 1;
        while ($i <= 10) {
        echo $i++;  /* the printed value would be
        $i before the increment
        (post-increment) */
        } 
     /* example 2 */
        $i = 1;
        while ($i <= 10):
        print $i;
        $i++;
        endwhile;
        ?>
for
     for 循環是 PHP 中最複雜的循環結構。它的行為和 C 語言的相似。 for 循環的語法是:

      for (expr1; expr2; expr3)
        statement
      
   第一個表達式(expr1)在循環開始前無條件求值一次。
     expr2 在每次循環開始前求值。如果值為 TRUE,則繼續循環,執行嵌套的循環語句。如果值為 FALSE,則終止循環。
     expr3 在每次循環之後被求值(執行)。
     每個表達式都可以為空。expr2 為空意味著將無限循環下去(和 C 一樣,PHP 認為其值為 TRUE)。這可能不像想像中那樣沒有用,因為經常會希望用 break 語句來結束循環而不是用 for 的表達式真值判斷。
     考慮以下的例子,它們都顯示數字 1 到 10:

        <?php
        /* example 1 */
        for ($i = 1; $i <= 10; $i++) {
        echo $i;
        }
        /* example 2 */
        for ($i = 1; ; $i++) {
        if ($i > 10) {
        break;
        }
        echo $i;
        }
        /* example 3 */
        $i = 1;
        for (;;) {
        if ($i > 10) {
        break;
        }
        echo $i;
        $i++;
        }
        /* example 4 */
        for ($i = 1; $i <= 10; echo $i, $i++);
        ?>
    當然,第一個例子看上去最正常(或者第四個),但用戶可能會發現在 for 循環中用空的表達式在很多場合下會很方便。
         PHP 也支持用冒號的 for 循環的替代語法。

     for (expr1; expr2; expr3):
        statement;
        ...
    endfor;
     

foreach

     PHP 4 引入了 foreach 結構,和 Perl 以及其他語言很像。這只是一種遍曆數組簡便方法。foreach 僅能用於數組,當試圖將其用於其它數據類型或者一個未初始化的變量時會產生錯誤。有兩種語法,第二種比較次要但卻是第一種的有用的擴展。

    foreach (array_expression as $value)
        statement
   foreach (array_expression as $key => $value)
        statement
  
     第一種格式遍歷給定的 array_expression 數組。每次循環中,當前單元的值被賦給 $value 並且數組內部的指針向前移一步(因此下一次循環中將會得到下一個單元)。
     第二種格式做同樣的事,只除了當前單元的鍵名也會在每次循環中被賦給變量 $key。

    <?php
    $arr = array(1, 2, 3, 4);
    foreach ($arr as &$value) {
    $value = $value * 2;
    echo $value;
    }
    // $arr is now array(2, 4, 6, 8)
    ?>

 # 輸出     2468
  
exit

     同die()函式
     結束PHP程式,並留下訊息。

  <?php
        //exit program normally
        exit;
        exit();
        exit(0);
        //exit with an error code
        exit(1);
        exit(0376); //octal
        ?>
 
return

     如果在一個函數中調用 return() 語句,將立即結束此函數的執行並將它的參數作為函數的值返回。

     <?php
        // Return the minimum of two numbers
        function min($a, $b){
        return $a < $b ? $a : $b;
        }
        ?>