進度條

【PHP】11. 更多條件判斷與null空集合

【PHP】11. 更多條件判斷與null空集合

作者: 進度條編輯群 更新日期:

此文章也有影片介紹,可以搭配影片一起學習!

01. 更多條件判斷與null空集合 (所屬課程)


以下正式開始文章


條件判斷(else if)

看完了前兩節的課程,相信各位同學對條件判斷有了初步的了解,上完這堂課以後,你會學習到如何用更精簡的語法來處理問題,不過我們先用目前學習到的if else來嘗試解決以下的問題。

我們先想像一個情境,如果有一個鐵路訂票系統,票種設定為:
 

未滿3歲                                     不用票

3歲以上(含3歲)~未滿18歲             半票

18歲以上(含18歲)~未滿60歲          全票

60歲以上(含60歲)                       敬老票

 

那我們可以先寫成這樣子,

<?php

if( $userAge < 3){
  echo "不用票";  // 第一種情況
}else{
  if($userAge < 18){
    echo "半票";  // 第二種情況
  }else {  
    if( $userAge < 60){
      echo "全票";  // 第三種情況
    }else{
      echo "敬老票";   // 第四種情況
    }
  }
}

?> 

 

不過這種寫法會寫很多大括號(俗稱波動拳寫法),還蠻容易混淆的,我們可以改寫成下列方式: 

 

 

程式碼可以這樣改寫,並加上變數$userAge=20來測試,

範例:

<?php

$userAge = 20;

if($userAge < 3){
  echo "不用票";
}else if($userAge < 18){
  echo "半票";
}else if($userAge < 60){
  echo "全票";
}else{
  echo "敬老票";
}


?>

 

輸出結果: 

全票 


若將年齡改成2歲,$userAge=2

輸出結果:

不用票 

 

空集合(null)

如果有一個系統,使用者必須先設定帳號才能建立會員,當使用者甚麼都沒有輸入時,我們必須要提醒告訴使用者必須輸入內容才能進入下一個步驟。這種情況我們可以用條件判斷來設定,如果使用者在設定帳號的欄位甚麼都沒有輸入時,會出現「請輸入帳號」,直到欄位有內容時,才會執行下一個步驟。

 

因此,我們可以利用空集合搭配條件判斷進行驗證,

例如: 

<?php

  $result = null;

  if ( $result ){

    echo "不是null 空集合 <br/>";

  }else{

    echo "發生了預想內的錯誤!! <br/>";

  }

?> 

 

輸出結果:

發生了預想內的錯誤!! 


不過除了 null 以外,0、"" (空字串)都會跳到else。

 

初始化

這算是一個常見的運用。在很多情況下,我們的情境不允許null值。

比方說如果今天班上同學有人沒有參加期末考試($result == null),老師在成績單上還是必須給沒參加考試的同學0分 ($result = 0),才能讓全班成績單在加總算分數時不會出現計算錯誤,所以我們常常會在一段邏輯的最前面加上以下的這段防呆。

<?php

$result = null;

if ($result == null){
    $result = 0;
}

echo  $result;

?> 


不過有時候也會看到有人反的寫null == $result,

<?php

$result = null;

if (null == $result){
  $result = 0;
}

echo  $result;

?> 

 
為什麼要寫反? 這是因為如果不心把$result == null寫成 $result = null 的時候,會變成$result「被賦予」null,這時就甚麼都不會執行了。

(你可以嘗試著複製貼上, ctrl + z 回復上一個動作,之類的多按幾次,就很容易發生這樣的寫錯法。)
 

 <?php

 $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粉絲團按讚喔!!

Small logo

進度條編輯群

進度條編輯團隊