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事情(以上條件都不成立時要做的事);
}
?>
而if
跟else在
整個判斷流程最多都只能出現一次,但是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(變數){
case 值1:
變數==值1時執行這裡;
break;
case 值2:
變數==值2時執行這裡;
break;
case 值3:
變數==值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