[基礎課程] PHP 條件判斷邏輯
本篇開始透過介紹程式的基礎邏輯去學會相關 PHP 語法指令,請開始在 Web 目錄下新增檔案 2_ifelse.php,為了簡化程式碼結構將不再建置 HTML 基本結構。請開始做 PHP 各種練習並預覽網頁結果。
為了讓程式變得好玩,我們先介紹一個能夠產生隨機數的內建函式,之後才依序介紹各種神邏輯操作。
Rand 函式
- rand() 是一個可以產生隨機數字的函式,可以透過指定一個數字範圍由系統隨機產生。
- 語法結構為
rand($min,$max)
,放入最小與最大範圍,可透過某變數儲存這個結果。 - 譬如
$num=rand(0,99);
代表$num 這個變數內容可能是 0~99 某個數字。
練習:試著產生 0~100,沒有小數點
練習:試著產生 0~10,有小數點位數 1 ex:7.5
練習:試著產生 0~10,有小數點位數 3 ex:7.543
|
如果正常無誤,你應該可以正常得到期望的隨機數字結果。
科普知識:什麼是函式
函式可解讀為 function,想像有個道具當丟一些東西進去時,會回傳處理過的結果。函式會有個 function's name & ()
,而 ()
內可指派單或多個欄位並以 , 分隔開提供擺放指定對象,指定對象可以是變數或者資料,也可能是一段指令。php 有內建豐富的各種函式,也可以自己開發一個自訂函式。
if else 判斷
除了基本變數,還有條件式描述也很基本,你可以對程式下達條件做不同對應的結果。if else 為所有程式語言當中最基本的程式邏輯。
語法範例為
if(條件 A) {A 指令} //當這裡條件是對的,執行這裡{}內的指令
else {C 指令} //當前一個 if 是錯的,執行這裡{}內的指令另外還有多重判斷
if(條件 A) {A 指令} //當這裡條件是對的,執行這裡{}內的指令
else if(條件 B) {B 指令} //當前一個 if 是錯的 and 這裡條件是對的,執行這裡{}內的指令
else {C 指令} //當前一個 if 是錯的,執行這裡{}內的指令else if 這行可出現 0 次或多次,取決你想要做幾次判斷動作。
else if 也有人寫 elseif,兩者效果差不多但定義方式不同,請 Google 差別在哪
練習:跟著做學會基本的判斷
|
Boolean 布林值
運算邏輯時除了直接告知條件為 true 或 false,也可以透過一些邏輯事件來告知。常見的有比較型與存在型為基本,相反型與多條件型為進階。
比較式
$a==$b
:等於$a!=$b
:不等於$a>$b
:大於$a>=$b
:大於且等於$a<$b
:小於
練習:跟著以下練習學會 rand+if else 的設計
|
自我練習
參考前例,使用 rand() 跟 if else 完成抽卡機率,顯示輸出文字”你抽到了 SSR 卡”、”你抽到了 SR 卡”、”你抽到了 R 卡”、”你抽到了 N 卡”,出現機率分別為 4%,10%,35%,51%
|
存在式
簡單來說,isset() 檢查的是變數是否存不存在,而 empty() 檢查的是變數內的「值」是否為空。is_null() 有些人會少用,原因在改用比較式(變數==null) 同效果於此函式。
isset()
:檢查變數是否有設置empty()
:檢查變數是否為空值is_null()
:檢查變數是否為 null
科普知識:官方說明文件三者差異結果
練習:跟著以下動作
|
練習:加強觀念
|
相反式
相反式是前兩者的顛倒法。將 True 跟 False 做顛倒黑白。使用!前綴並將內容 () 起來譬如。試著想想以下的真為假,假為真。
!($a==$b)
!($a>$b)
!($a>=$b)
!($a<$b)
!(empty($c))
!(isset($c))
通常是邏輯需要顛倒使用。就像中文舉例來說 我不認同你所說的話是正確的 之描述法。
多條件式
當條件有多筆需要判斷時,你可以組合前面所有的條件最後一起判斷這條件的真假成立。常見如下:
- (條件 A)&&(條件 B):為 AND 所有條件,所有條件皆為 true 時成立。
- (條件 A)||(條件 B):為 OR 任一條件,任一條件為 true 時成立。
練習:
|
三元運算子
是一種 if else 的比較簡潔有力的一行表示法。你可以一次很快的表示出來。但無法做多層次的表達。語法為(條件)? 成立時執行:否定時執行;
練習:
|
switch case 路由判斷
跟 if else 觀念很像但不一樣的是,比較整潔清楚好閱讀。也是一行行的往下執行判斷。語法為:
switch ($variable) { |
當$variable 變數的內容等於 case 內的 value 時。會執行該#code。如果遇到 break 會結束 switch 行為,否則會繼續往下一行 code 執行檢查。只有當 case 條件都不成立時則前往 default 執行該#code。
練習:
|
自我練習:
請改成 if else 版本再做一次
|
以上這兩種都能使用,但在不同的狀況會有優劣。
- 在編寫行數優點來說 if>switch,以閱讀性優點來說 switch>if
- ifelse 可以模擬出 switch,但反過來卻不行,由於 switch 只限定於判斷等於的處理。
總結
- 本篇重點在邏輯判斷處理,除了 if else 還有 switch case 這兩種,不同的環境有不同考量。
- 可以明白如果執行範圍多行可以
{}
包起來,如果只有一行有時候可以省略{}
()
可以是為優先權高執行,也就是條件太多就包起來個別優先執行- 程式世界都是依賴 True/False 做思考,由布林值結果塞入邏輯描述,條件結果得出真真假假
以上課題之完整代碼: view full code