close

任何程式語言的語法結構中,一定有所謂的"控制架構_Control Structure"。透過這些控制架構,我們可以控制程式碼的執行方式,撰寫PHP時也是一樣。今天,我們就針對這個主題做一個綜合性的概念介紹:
壹.  條件決策控制架構:
    A.  if 敘述:
        1.  單一指令碼 if 結構:
             if(布林運算表示式)  單一指令碼; 
             例如:if($age>40 && $mind=='!')  echo  'Age is a question of mind over matter.';
             或者是寫為:
             if($age>40 && $mind=='?')
                 echo  "If you don't mind, it doesn't matter !";   
        2.  多指令碼 if 結構:
              if(布林運算表示式){指令碼1;指令碼2;指令碼3;…;} 
              例如:if($a>$b && $b<$c){ echo 'a比c大?';$x = $a-$c;echo $x;}
              一般而言,為了讓上一行的程式碼更適合人類解讀,我們通常寫為
              if($a>$b && $b<$c)
              {
                 echo  '$a比$c大';  //這跟 echo  "$a比$c大"; 有點不同
                 $x = $a-$c;
                 echo  $x;
              }



     B.   else敘述: 必須和 if 敘述合用
        1.  單一指令碼 else 結構:
              if(布林運算表示式){…;} else  單一指令碼;
        2.  多指令碼 else 結構:
              if(布林運算表示式){…;} else {指令碼1;指令碼2;…;} 
              為了方便程式撰寫者(或修改者)解讀,我們一般都寫成
              if( conditionals )
              {
                  指令碼1;
                  指令碼2;
                  … … …;
              }
              else
             {
                  指令碼a;
                  指令碼b;
                  … … …;
             }
        在這裡我們要強調的是,只要可以置放一個指令碼(instruction)的地方,我們就可以再用一個控制結構碼予以取代。意思也就是說,可以再用一個if或if…else…或者之後將提到的其他控制結構來取代它。至於我們之前所提的空白(Space、Tab、Enter),只要可以置放一個空白的地方,就可置放無限多。



    C.    elseifelse  if 敘述: else跟if之間有沒有空白都同樣意思
           因為可以置放一個指令碼的地方,我們就可以再用一個控制結構取代。所以 else 後面當然可以再放一個 if 敘述。因此,elseif 或 else  if 這一種所謂的巢狀(nested)敘述也就應運而生。而且,只要有需要,幾層都可以,例如
             if( conditional 1 )
             {
                 指令碼 1; 
                 … … …;
             }
             elseif( conditional 2 )
             {
                 指令碼 a;
                 if( conditional a )
                 {
                     指令碼 x; 
                     … … …;
                 }
                 elseif( conditional b ) 
                 {
                     指令碼 y; 
                     … … …;
                 }
                 else
                 {
                     指令碼 z;
                     … … …;
                  }
                 指令碼 b; 
                 … … …;
             }
             else
             {
                 指令碼n;
                 指令碼m;
                 … … …;
             }



    D.  switch … case …敘述:
          當巢狀的if …else if…用的太複雜時,很容易讓程式碼顯得冗長,而且解讀起來讓人頭暈目眩。因此,所有的程式語言都有解決的語法結構。在PHP中,關鍵字是switch、case、break、default這四個字。
             switch … case …敘述的基本結構為:
             switch( expression )
             {
               case  value 1
                   指令碼 1; 
                   … … …;
                   break;         // switch結構執行到break;指令時才會完全離開。
               case  value 2:
                   指令碼a; 
                   … … …;
                   break;
               case  value n
                   …  ; 
                   …; 
                   break;
               default
                   指令碼x; 
                   … … …;
                   break;
             }



貳.  迴圈結構:
       我們在寫程式碼時,常常會需要把某一個或某一些的指令碼重複執行,不管你用手寫或複製貼上的方式撰寫,都是一件相當累人的事,而且缺乏彈性。因此,所有的程式語言也都有解決這個需求的所謂迴圈語法結構。在PHP中,有幾種迴圈的結構能夠讓我們使用。
    A.  while迴圈:
        1.  單一指令碼while迴圈:
              while (布林運算表示式)  單一指令碼; 
              例如:while ($a>$b)  echo  $a--;  //此處使用後置型遞減運算子
        2.  多指令碼while迴圈:
              while (布林運算表示式){指令碼1;指令碼2;指令碼3;…;} 
              例如:while ($a>$b){ echo '$a現在的值是';echo  $a--;}
              同樣地,這種結構我們通常也會寫成
              while ($a>$b)
              {
                  echo '$a現在的值是';
                  echo  $a--;    //先將$a的值輸出後,再將$a減1
              }
※   請特別注意,使用迴圈時一定要避免陷入無窮迴圈的危機,也就是說,布林運算表示式一定要有呈現不成立(FALSE)的機會。如果布林運算表示式的結果永遠都是TRUE,迴圈中的指令就會不斷地執行下去…網站主機就當機啦。



    B.     for迴圈:
            for迴圈結構語法為:
            for(變數起始值; 布林運算表示式; 變數累進值){指令碼1;…;} 
            例如:
            for($a = 0;$a < 100;$a++)
            {
                echo  '運算結果是'
                echo  $a*100
            }
    其中,$a的起始值我們將它設為0;執行迴圈中程式碼的條件是$a小於100;接著,$a自動加1。迴圈中的程式碼執行完畢後,for迴圈會再測試$a < 100的條件是否仍然成立(為TRUE),如果成立,$a又會加1,迴圈中的程式碼也會再被執行一次;…,直到測試$a < 100的條件結果為FALSE時,for迴圈才會結束它的工作。程式才接續執行for迴圈結束符號 } 之後的程式碼。



    C.    do … while …迴圈:  又稱為"後測試while迴圈"
            基本語法結構為:
             do{指令碼1;指令碼2;指令碼3;…;}while(布林運算表示式)
    後測試do … while …迴圈可以確保{}中的指令碼起碼會被執行一次。因為,它是先執行一次指令碼之後再檢查while後面的布林運算表示式的值是否為TRUE。如果為TRUE,那麼它就再回去執行一次指令碼;如果為FALSE,那do … while …迴圈即結束,接續執行其後的指令碼。

arrow
arrow
    全站熱搜

    夜貓 發表在 痞客邦 留言(2) 人氣()