控制語句
在我們之前看到的PHP的代碼的例子中,要麼是只有一個單獨的向Web頁面輸出文本語句;要麼是一系列的依次執行的語句。如果你用其他語言編寫過程式,你應該知道,實際上很少有這麼簡單的程式。
和任何其他的程式設計語言一樣,PHP也提供了很方便地處理指令碼中的“控制流程”的方法。就是說,PHP中包含了一些特殊的語句,通過這些語句你可是不受依次執行的順序的束縛。這種語句被稱之為“控制語句”。不理解?不要擔心!有一些例子會很好地協助你。
最基本最常用到的控制語句是if-else語句。它的結構是這樣的:
if ( ) { //如果是真,將執行的語句。 } else { //(可選)如果是假,將執行的語句。 } |
這個控制語可以讓我們告訴PHP根據一些條件的真假來決定相應地執行哪一組語句。如果你不覺得我這麼做有點空虛,我們可以將我們剛才建立的welcome.php檔案修改為:
if ( $name == "Kevin" ) { echo( "Welcome, oh glorious leader!" ); } else { echo( "Welcome, $name!" ); } |
現在,如果傳遞給這個頁面的name變數的值是Kevin,將顯示一個特殊的資訊。否則,將顯示一個包含輸入的name的普通的資訊。
需要指出的是,在這個結構中,“else子句”(它指出了if-else結構中條件為假時執行的內容)是可選的。對於上面的例子,如果我們的目的是當適當的名字被輸入時,顯示特殊的資訊,否則就什麼也不顯示。這段代碼應該是這樣的:
if ( $name == "Kevin" ) { echo( "Welcome, oh glorious leader!" ); } |
在上麵條件中所使用的==是用比較兩個值是否相等的運算子。要特別記住的是在這兒你需要輸入兩 個等號。如果你輸入的是一個等號,你實際上使用的是前面我們 討論過的賦值運算子,你將不再是對兩個變數的值進行比較,而是給變數賦了一個新值(這個操作會附帶地返回一個true)。這樣做的結果不僅僅是導致這個條 件永遠是true,它還可能改變我們所要檢查的變數的值,這可能會導致很多問題。
防止發生這種錯誤有一種安全的做法,那就是象下面這樣顛倒用來比較的變數和常量的位置:
| if ( "Kevin" == $name ) { |
這樣做的效果是完全相同的,但是當你忘了第二個等號時,我們來看看會發生什麼情況。PHP會試圖將變數($name)的值插入常量("Kevin")中。因為你不能改變常量的值,PHP會中斷並提示一個錯誤資訊,這將立即提示你忘了第二個等號!
條件可以比單個的比較是否相等來得更複雜。回憶我們修改的welcome.php3,它是可以同時擷取firstname和lastname的。如果我們想要為某個特定的人顯示一個特殊的資訊,我們可以同時比較這兩個變數:
if ( "Kevin" == $firstname and "Yank" == $lastname ) { echo( "Welcome, oh glorious leader!" ); } |
只有$firstname的值是Kevin,而且$lastname的值是Yank時這個條件 才會返回真。and的意義就是只有兩個比較都為真時,整個條 件才會返回真。還有一個符號是or,這使得兩個比較中至少有一個為真時,整個條件就返回真。如果你對JavaScript和C中的運算子 (&&(and)和||(or))熟悉的話,你也可以在PHP中同樣地使用它們。
在下面我們將看到一些更複雜的比較。現在,我們只需要對if-else語句有個基本的理解就可以了。
另一個常用的PHP控制語句是while迴圈。if-else語句使我們可以根據條件選擇是否執行一組語句,while迴圈使我們可以根據條件來決定重複執行一組語句多少次。while迴圈的基本格式應該是這樣的:
while ( ) { //只要是真時反覆執行的語句 }
這和一個沒有else子句的if-else 語句非常相象。不同點在於當條件為真時語句執行完後,將不再是接著執行結束符(})後面的語句,而是再次檢查條件。如果這個條件仍為真。將會重複執行語 句,直到條件不再為真時為止。當這個條件首次返回假時(不管是第幾次檢查它),將會跳轉執行迴圈後面的語句(在結束符後面)。