if...elseif...else

if...elseif...else是一種「多重條件、多重判斷」的條件判斷式

首先我們先先介紹「if」

if對應到的中文就是「如果...就...」,邏輯上的說法是「如果A條件成立,就做B事情」
翻譯成PHP語法:

<?php
    //我們給程式一些條件,條件成立的話,就執行一些要做的事情

    if(A條件){
        做B事情(A條件成立要做的事);
    }
?>

舉例來說,國中段考時會跟別人打賭會說「如果我考100分,你就請我喝珍珠奶茶」
如果把這句話翻譯成PHP,會像是下面這樣

<?php
    if(我考100分){
        你請我喝珍珠奶茶;
    }

    //程式碼會類似這樣寫

    if($score == 100){
        buyDrinkToMe();
    }
?>

上面有提到,if()內可以有不只一個條件,也就是可以有「多重條件」
比如媽媽說「如果你今天寫完功課而且晚上10點前就上床睡覺,明天就帶你去吃牛排」

<?php
    if(我寫完功課 && 我10點以前去睡覺){
        明天吃牛排();
    }

    //程式碼會類似這樣寫

    if($isHomeworkFinish == true && $sleepTime < 10){
        eatSteakTomorrow();
    }
?>

在2個條件都成立的情況下,才會執行對應要做的事情

接下來看看「if...else」

if...else翻譯成中文是「如果...就...不然就...」,邏輯上的說法是「如果A條件成立,就做B事情,不然就做C事情」
翻譯成PHP語法:

<?php
    //我們給程式一些條件,條件成立的話,就執行一些要做的事情,不成立的話,就執行另一些要做的事情

    if(A條件){
        做B事情(A條件成立要做的事);
    }
    else{
        做C事情(A條件不成立時要做的事);
    }
?>

由於「如果我考100分,你就請我喝珍珠奶茶」有點不合理,這樣沒考到也沒關係啊
必須讓沒考到也要付出一點代價,所以改成「如果我考100分,你就請我喝珍珠奶茶,不然我就請你喝水」

<?php
    if(我考100分){
        你請我喝珍珠奶茶;
    }
    else{
        我請你喝水
    }

    //程式碼會類似這樣寫

    if($score == 100){
        buyDrinkToMe();
    }
    else{
        buyWaterForYou();
    }
?>

最後來看「if...elseif...else」

if...elseif...else翻譯中文是「如果...就...不然如果...就...以上都不是就...」
邏輯上的說法是「如果A條件成立,就做B事情,不然如果C條件成立,就做D事情,以上都不成立就做E事情」
翻譯成PHP語法:

<?php
    //我們給程式多種條件,條件1成立的話,就執行一些要做的事情,不然條件2成立的話,就執行另一些要做的事情,都不成立的話,就執行其他要做的事

    if(A條件){
        做B事情(A條件成立要做的事);
    }
    else if(C條件){
        做D事情(C條件成立要做的事);    
    }
    else{
        做E事情(以上條件都不成立時要做的事);
    }
?>

ifelse在整個判斷流程最多都只能出現一次,但是else if可以重複出現很多次

來看一下這個例子,我們寫個程式來判斷成績單上學生的成績所對應到的罐頭評語(評語來源)

<?php
    $score = 90;

    if($score == 100){
        //100分
        echo '傳奇,Legendary';
    }
    else if($score >= 80){
        //80~99分    
        echo '神一般的,GodLike';
    }
    else if($score >= 60){
        //60~79分
        echo '君臨天下,Dominating';
    }
    else if($score >= 40){
        //40~59分
        echo '無人能檔,Unstoppable';
    }
    else{
        //40分以下
        echo '瘋狂殺戮,Rampage';
    }

    //output:神一般的,GodLike
?>

switch

switch 有點類似 if...else 的效果,但switch是針對「一個變數的值」進行多重判斷
基本上switch能做到的,if...elseif...else也都能做到,但是switch的程式碼可讀性會相對較清楚簡潔一些

先來看一下基本的語法格式:

<?php
    switch(變數){
        case1:
            變數==值1時執行這裡;
            break;
        case2:
            變數==值2時執行這裡;
            break;
        case3:
            變數==值3時執行這裡;
            break;
        default:
            上面的都不吻合,那就執行這裏;
    }
?>

switch包含許多組case,每一組case都有一個需要比較的值
在執行時,switch()內的變數會按照由上而下的順序一一與case中的值做比較,若符合條件就執行對應的程式碼
直到碰到break或是switch程式區塊執行到結尾才會停止
簡單來說case是執行點,break是結束點
default就像是if...else中的else,如果上面的每一組case都不符合,就會執行default

來看看程式碼吧,這個範例是用來轉換並顯示今天是星期幾

<?php
    echo '今天是 ';
    //date('w') 是取得今天為星期幾 該日期函數所回傳的值 是字串 '0','1','2','3','4','5','6' 

    switch (date('w')) {
        case '0':
            echo '星期日';
            break;
        case '1':
            echo '星期一';
            break;
        case '2':
            echo '星期二';
            break;
        case '3':
            echo '星期三';
            break;
        case '4':
            echo '星期四';
            break;
        case '5':
            echo '星期五';
            break;
        case '6':
            echo '星期六';
            break;
        default://你可以把default想成是例外處理 當以上條件都不符合時才會跑default
           echo '未取得正確日期函數';
    }

    //本文寫作當天是2017/11/16,星期四
    //output:今天是 星期四
?>

剛剛上面有提到,switch會結束的情況有2種

  • 執行到break
  • switch程式區塊執行到結尾

那麼如果我們把上面那個範例的break都拿掉,會怎麼樣呢?

<?php
    echo '今天是 ';
    //date('w') 是取得今天為星期幾 該日期函數所回傳的值 是字串 '0','1','2','3','4','5','6' 

    switch (date('w')) {
        case '0':
            echo '星期日';
        case '1':
            echo '星期一';
        case '2':
            echo '星期二';
        case '3':
            echo '星期三';
        case '4':
            echo '星期四';
        case '5':
            echo '星期五';
        case '6':
            echo '星期六';
        default://你可以把default想成是例外處理 當以上條件都不符合時才會跑default
           echo '未取得正確日期函數';
    }

    //本文寫作當天是2017/11/16,星期四
    //output:今天是 星期四星期五星期六未取得正確日期函數
?>

可以發現顯示出來的資訊多了許多其他文字
那是因為在case '4':時比對成功了,但是case '4':後面沒有break
沒有停止switch,所以就繼續往下執行case '5':case '6':default,直到結尾

這個用法是switch的特性,有的時候可以依照程式的需求,拿這個特性來做不一樣的處理
一般在使用上還是要記得要加上break

results matching ""

    No results matching ""