到了這個章節,我們要提到的是控制結構~
這其實就有點像是我們日常生活中的流程控制
如果…就…,諸如此類的
而在程式語言中,就是利用這些控制結構去幫助程式碼可以按照我們所想的執行。
在這章節我會分成 8 個部分來討論,分別是:
- Condition Judgement
- Loop
- Switch Case
- Return
- Add reference of PHP file
- Goto
Condition Judgement
這部分主要就是在談條件判斷
就像剛剛說的,如果…就…
在這一小節會提到該如何用語法來表達這一個部分。
這部分主要會介紹以下 3 種語法的使用:
- if
- else
- elseif or else if
##1. if
這語法就像是我們常說的如果
會依據條件式做判斷,並回傳 TRUE 或 FALSE。1
2if(true)
echo "correct!"; // 結果會印出 correct!
##2. else
這語法就像是我們常說的否則
當 if 條件式為 FALSE 的時候,就會呼叫 else 裡面的程式碼。
1 | if(false) |
##3. elseif or else if
當想要使用多個條件判斷時,可以使用 else if
而在 PHP 裡也可以寫成 elseif。1
2
3
4
5
6
7
8$num = 15;
if($num > 20)
echo "the number is bigger than 20";
else if($num < 20 && $num > 10)
echo "the number is in the range of 20 to 10";
else
echo "the number is less than 10";
Loop
在來要提到迴圈
使用迴圈可以幫助我們重複執行一段程式碼。
底下會介紹不同迴圈的種類以及相關用法:
- while
- do while
- for
- foreach
##1. while
若條件式為 TRUE,則持續執行程式碼直到條件式為 FALSE 才停止。1
2
3
4
5
6$num = 0;
while($num < 3){
echo $num++;
}
// 執行完會印出 012
另外在 PHP 當中,也可以使用 while 和 endwhile 來當作程式碼的範圍 (取代 {} 間括號)
不要忘記在 while 後面接上一個冒號1
2
3
4
5
6$num = 0;
while($num < 3):
echo $num++;
endwhile
// 執行完同樣會印出 012
##2. do while
同樣是持續執行程式碼直到條件式為 FALSE 才停止。
不過差異在於,使用 do while 的時候,會先執行 do 裡面的程式碼,再去判斷是否有符合條件式
因此,使用 do while 必定可以執行一次程式碼。1
2
3
4
5$num = 0;
do{
echo $num;
}while($num > 3);
// 執行完會印出 0
##3. for
for 迴圈提供 3 個參數,由左到右分別是
- 迴圈起始參數
- 迴圈結束條件
- 迴圈如何進行
特別要注意的是,這 3 個參數都不提供也可以正常執行,但要小心別讓它變成無窮迴圈,也就是不會停止的迴圈1
2
3for($i = 0; $i < 3; $i++)
echo $i;
// 執行完會印出 012
你也可以選擇將 for 迴圈寫成單行的形式,詳細範例如下:
有幾個小重點在於:
- 同樣是 3 個參數,不過在迴圈進行的部分 (第 3 個參數)以逗號進行分隔,撰寫迴圈執行的程序
- 這裡使用 print 而非 echo,因為 print 會返回回傳值,因此可以當成一個普通函式來呼叫,並且可以用在較複雜的運算式中~
1
2for($i = 0; $i < 3; $i++, print $i);
// 執行完會印出 123
PHP 針對 for 迴圈,一樣提供了使用 for 和 endfor 來當作程式碼的範圍 (取代 {} 間括號)1
2
3
4for($i = 0; $i < 3; $i++):
echo $i;
endfor
// 執行完會印出 012
##4. foreach
最後要介紹 foreach,可以快速取得陣列中每個元素的 key 和 value。
就我個人認為在 PHP 當中,使用 foreach 的頻率大於使用 for 迴圈
是一個非常方便的語句~1
2
3
4
5
6
7
8$numGroup = array(1, 2, 3);
foreach($numGroup as $key => $value)
echo "$key => $value<br>";
// 執行完會印出
// 0 => 1
// 1 => 2
// 2 => 3
介紹完迴圈的種類之後,要再順便介紹 2 個和迴圈相關的關鍵字
- break
- continue
##1. break
當使用 break 關鍵字時,可以從 loop 或是 switch (後面會介紹) 中跳出,中斷執行。
而使用 break 是預設跳出一層迴圈,可以在後面接上數字,代表要跳出的層數。1
2
3
4
5
6
7
8$num = 1;
while($num < 5){
if($num > 3)
break;
echo $num++;
}
// 執行完會印出 123
##2. continue
同樣也是使用在迴圈中,不過和 break 不同的是 continue 並不會完全跳出迴圈,
而是只會跳過符合條件的元素,也因此迴圈仍然會繼續執行到結束。1
2
3
4
5
6
7
8$num = 1;
while($num < 5){
if($num++ == 3)
continue;
echo $num;
}
// 執行完會印出 235
switch case
這部分要提到 switch case
switch case 和 if elseif… 結構和用途非常相似
可以使用 case 接上數值,當數值匹配到的時候,就會執行該 case 項目
另外也可以使用 default,若沒有任何匹配的數值時,就會執行該項目
有 1 點要特別注意!
倘若 case 的區塊裡沒有使用 break 跳脫語句的話,那麼就會繼續往下個 case 執行完同樣會印出
因此就可能會發生將每個 case 都執行完的狀況,這點要謹記!
1 | $num = 1; |
同樣也可以改以 switch endswitch 當作程式碼範圍,這裡就不再多做示範了~
Return
接下來要提到 return 這個關鍵字的用法
它可以用來回傳數值,當用在函式裡面的時候,可以將函式計算完的結果回傳,以此減輕主程式的大小
而當 return 使用在全域範圍的情況下,就會直接中斷執行 PHP 程式。
另外要注意的是 return 也可以不返回任何數值,那就單純只會中斷程式碼的執行而以~
1 | echo "one"; |
Add reference of PHP file
這裡要介紹如何將 PHP 檔案從外部參考引入。
通常因為要避免檔案過大或是過於雜亂,所以會盡量將不同用途的程式碼拆分成各個 PHP 檔案
再用加入參考的方式去使用每個 PHP 檔案中定義的變數、常數或函式
如此一來就可以方便維護程式碼,在閱讀上也更加容易!
而引入外部檔案參考的方式分為以下 4 種:
- require
- require_once
- include
- include_once
1. require
當使用 require 引入外部 PHP 檔案時
如果 PHP 沒辦法找到指定檔案的話,就會產生 E_COMPILE_ERROR 錯誤,並且中斷 PHP 程式碼的執行
引入檔案的方式可以使用括號包住、也可以單純接在 require 關鍵字後面1
2
3require("test.php");
require "test.php";
2. require_once
而 require_once 和 require 的效果是一樣的,當無法順利找到檔案時,就會中斷 PHP 腳本的執行
而這兩者的差異在於,當使用 require_once 的時候
PHP 會去檢查要參考的檔案是否已經有被參考了,如果已經被參考,那就不在將檔案引入一次
這樣就可以避免相同檔案被多次引入參考的問題~
3. include
另一種引入參考的方式就是使用 include
include 和 require 的差別在於,當使用 include 來參考外部檔案時
如果 PHP 沒辦法順利找到檔案,只會發出警告,不會中斷 PHP 腳本的執行
不過這樣問題就可能會發生在後續的程式碼,若後續有使用到外部引入的資料時
就可能會因為找不到而取用失敗~
因此建議還是使用 require 或 require_once 為主!
另外在使用 include 的時候,會根據是否成功引入檔案回傳布林值,可以使用這種方式去加以判斷該不該繼續執行 PHP 腳本~
1 | <?php // test.php |
4. include_once
和 require_once 一樣,在引入檔案參考時,會先檢查檔案是否已經被參考過
如果有被參考,則不再將檔案引入參考。
goto
最後要介紹 goto 語句的用法
當使用 goto 語句時,可以跳到某個事先定義好的程式碼區塊。
而程式碼區塊定義的方式是 特定名稱 加上 : (冒號)
例如: start: , end:
而跳轉的方式是 goto 加上 程式碼區塊的名稱
例如: goto start; goto end;
不過一般的情況下並不會太常使用 goto 語句,避免程式碼過於混亂,可以使用其他的語句達到相同的效果1
2
3
4
5
6
7
8
9
10
11$num = 0;
while($num < 10){
if($num == 1)
goto endLoop;
echo $num++ . "<br>";
}
endLoop:
echo "finished!<br>";
// 執行完會印出
// 0
// finished!