任何程式語言的語法結構中,一定有所謂的"控制架構_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. elseif 或 else 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 …迴圈即結束,接續執行其後的指令碼。
留言列表