【PHP】11. 更多條件判斷與null空集合
【PHP】11. 更多條件判斷與null空集合
此文章也有影片介紹,可以搭配影片一起學習!
01. 更多條件判斷與null空集合 (所屬課程)
條件判斷(else if)
看完了前兩節的課程,相信各位同學對條件判斷有了初步的了解,上完這堂課以後,你會學習到如何用更精簡的語法來處理問題,不過我們先用目前學習到的if else來嘗試解決以下的問題。
我們先想像一個情境,如果有一個鐵路訂票系統,票種設定為:
未滿3歲 不用票
3歲以上(含3歲)~未滿18歲 半票
18歲以上(含18歲)~未滿60歲 全票
60歲以上(含60歲) 敬老票
那我們可以先寫成這樣子,
if( $userAge < 3){
echo "不用票"; // 第一種情況
}else{
if($userAge < 18){
echo "半票"; // 第二種情況
}else {
if( $userAge < 60){
echo "全票"; // 第三種情況
}else{
echo "敬老票"; // 第四種情況
}
}
}
?>
不過這種寫法會寫很多大括號(俗稱波動拳寫法),還蠻容易混淆的,我們可以改寫成下列方式:
程式碼可以這樣改寫,並加上變數$userAge=20來測試,
範例:
$userAge = 20;
if($userAge < 3){
echo "不用票";
}else if($userAge < 18){
echo "半票";
}else if($userAge < 60){
echo "全票";
}else{
echo "敬老票";
}
?>
輸出結果:
若將年齡改成2歲,$userAge=2
輸出結果:
空集合(null)
如果有一個系統,使用者必須先設定帳號才能建立會員,當使用者甚麼都沒有輸入時,我們必須要提醒告訴使用者必須輸入內容才能進入下一個步驟。這種情況我們可以用條件判斷來設定,如果使用者在設定帳號的欄位甚麼都沒有輸入時,會出現「請輸入帳號」,直到欄位有內容時,才會執行下一個步驟。
因此,我們可以利用空集合搭配條件判斷進行驗證,
例如:
$result = null;
if ( $result ){
echo "不是null 空集合 <br/>";
}else{
echo "發生了預想內的錯誤!! <br/>";
}
?>
輸出結果:
不過除了 null 以外,0、"" (空字串)都會跳到else。
初始化
這算是一個常見的運用。在很多情況下,我們的情境不允許null值。
比方說如果今天班上同學有人沒有參加期末考試($result == null),老師在成績單上還是必須給沒參加考試的同學0分 ($result = 0),才能讓全班成績單在加總算分數時不會出現計算錯誤,所以我們常常會在一段邏輯的最前面加上以下的這段防呆。
$result = null;
if ($result == null){
$result = 0;
}
echo $result;
?>
不過有時候也會看到有人反的寫null == $result,
$result = null;
if (null == $result){
$result = 0;
}
echo $result;
?>
為什麼要寫反? 這是因為如果不心把$result == null寫成 $result = null 的時候,會變成$result「被賦予」null,這時就甚麼都不會執行了。
(你可以嘗試著複製貼上, ctrl + z 回復上一個動作,之類的多按幾次,就很容易發生這樣的寫錯法。)
$result=null;
if (null = $result){ // 粗心寫錯少一個 = ,程式通常不會錯,根據經驗99%以上是人寫錯了
$result = 0;
}
echo $result;
?>
輸出結果:
這也是因為有些人會特別寫成null == $result,因為這樣子的判斷式經常寫在程式的開頭,如果手誤的話有可能會導致面的程式碼都無法執行。
(這種等級的手誤是可以靠撰寫單元測試程式測出來的,不過這不算在新手課程裡面。)
PHP型別比較表
在PHP官網裡有提供型別比較表,讓讀者們參考在各種情況下的條件判斷式會顯示true(真)還是false(假)。有興趣的同學可以參考:
PHP type comparison tables
http://php.net/manual/en/types.comparisons.php
最後,如果你喜歡我們的文章,別忘了到我們的FB粉絲團按讚喔!!