2018年12月10日 星期一

DW_PHP_AJAX_CH2 PHP語言入門_(3)流程控制_判斷

[If判斷敘述]

 if敘述是具有判斷力的敘述(也是最簡單、常用的判斷敘述), 它會依照訂定的條件執行相對的程式敘述, 當訂定的條件式成立後(評估值為True), 才會執行if之後的敘述, 反之。當訂定的條件式不成立(評估值為False), 則if之後的敘述將不會被執行。
 if是最常使用的判斷敘述, 它的通用格式是:
if  (條件式)  單行敘述;
它的意義是:如果『條件式』成立(評估值為True), 就執行『條件式』之後的『單行敘述』, 不然的話就跳過『條件式』之後的『單行敘述』, 繼續執行下面的程式敘述。 例如網站在下午六點鐘到午夜12點鐘不開放, 如果瀏覽者在這段時間進入網站, 則在網頁中顯示『明日請早!』。
<?php
if (date("H")>18);
echo ("明天請早!");
?>
如果在『條件式』成立(評估值為True)後要撰寫多個敘述時(條件成立後要做很多事), 可以使用結構化的寫法, 就是使用『{ }』把這些敘述(敘述區塊)包括在其中, 其格式如下:
if (條件式)
 {
   程式敘述區塊;
}
它的意義是:如果『條件式』成立(評估值為True), 就執行『{』之後的『程式敘述區塊』, 不然的話就跳過『{』之後的『程式敘述區塊』, 從『}』之後繼續執行下面的程式敘述。
 介於『{ }』之間的所有敘述就稱它為『敘述區塊』, 而在撰寫敘述區塊的時候, 請將敘述區塊退後幾格, 這樣將使程式更容易閱讀。 

流程說明: 例如網站在下午六點鐘到午夜12點鐘不開放, 如果瀏覽者在這段時間進入網站, 則在網頁中顯示『明日請早!』與瀏覽者的進入時間。
<?php
If (date("H")>=18)
{
echo ("明天請早!<br>");
echo date("G 時 i 分 s 秒 A");
}
?>
如果在『條件式』成立(評估值為True)後要撰寫多個敘述時(條件成立後要做很多事), 除了可以使用『{ }』把這些敘述(敘述區塊)包括在其中外, 亦可放棄使用『{ }』來包括敘述, 改用『endif;』來做, 格式如下:
if (條件式) : 
…
   程式敘述區塊;
…
endif;
它的意義是:如果『條件式』成立(評估值為True), 就執行『:』之後的『程式敘述區塊』, 不然的話就跳過『:』之後的『程式敘述區塊』, 從『endif;』之後繼續執行下面的程式敘述。
 if-else敘述的意思是說:『如果…就做…否則就….。』, 也就是當比較式成立時做某事, 比較式不成立時就做另外一件事。 執行單行敘述的if-else格式如下:
if  (條件式)
     程式敘述;
else
     程式敘述;
例如分數大於等於60分則顯示『及格』, 反之則顯示『不及格』:
<?php
 if ($_POST["score"]>=60)
  echo "您的分數". $_POST["score"] . "分,及格";
 else
  echo "您的分數". $_POST["score"] . "分,不及格";
?>
if-else敘述除了上述說明的正規用法外, 也可以使用『條件運算元』的方式來做:
(條件式)? 程式敘述A : 程式敘述B;
它的意義是:如果『條件式』成立(評估值為True), 就執行『?』之後的『程式敘述A』, 不然的話就跳過『程式敘述A』, 執行『:』之後的『程式敘述B』。 例如:
<?php
$score=60;
($score>=60)? $ans="及格" : $ans="不及格";
echo $ans;
?>

等同
<?php
$score=60;
$ans=($score>=60)? "及格" : "不及格";
echo $ans;
?>
上例若改為if-else敘述則為:
<?php
$score=60;
if ($score>=60)
 $ans="及格";
else
 $ans="不及格";
echo $ans;
?>
如果在條件式後面(條件式成立時)要撰寫多個敘述, 同時, 在else後面(條件式不成立時)也要撰寫多個敘述時, 我們可以使用結構化的寫法, 就是使用『{ }』把這些敘述(敘述區塊)包括在其中, 執行敘述區塊的if-else格式如下:
if  (條件式)
{
     敘述區塊(條件式成立時);
}
else
{
     敘述區塊(條件式不成立時);
}
流程說明: 例如網站在下午六點鐘到午夜12點鐘不開放, 如果瀏覽者在這段時間進入網站, 則在網頁中顯示『明日請早!』, 瀏覽者在這段時間之外進入網站, 則在網頁中顯示『歡迎光臨!』。
<?php
if (date("H")>=18)
{
 echo ("明天請早!<br>");
 echo date("G 時 i 分 s 秒 A");
}
else
{
 echo ("歡迎光臨!<br>");
 echo date("G 時 i 分 s 秒 A");
}
?>


當程式中必須設定多條過濾條件時, 可以採逐條過濾的方式來篩選答案:
if  (條件式1) 
     {
           敘述區塊;
      }
else if  (條件式2)
      {
           敘述區塊;
      }
.
.
else if  (條件式n)
      {
           敘述區塊;
      }

else if敘述是多條件判斷敘述, 它會逐條判斷條件過濾, 第一條路不通, 改走第二條路, 第二條路不通改走第三條路…., 當所有的條件式都無法成立時, 則執行『else』之後的程式敘述, 如果沒有『else』敘述區塊, 那麼, 當所有的條件都不符合時, 就直接跳離判斷敘述。

 [多路徑選擇的switch敘述] 

if-else敘述在條件成立後會執行條件式之後的敘述, 若條件不成立則會執行else之後的敘述, 只能二選一;如果程式有很多狀況, 需要建立多條選擇路徑, 則可使用else if逐條過濾條件敘述, 但是使用else if逐條過濾條件敘述來撰寫程式, 不但眼睛都看花了, 而且程式又拖的很長, 此時可利用具有多路徑選擇的switch敘述來撰寫程式。  
switch case敘述可以根據變數中的資料數值來決定程式的執行流程, 其變數的型態可以是字元型態、整數型態…等, 利用switch case敘述來撰寫程式不但執行速度快, 而且程式也淺顯易懂多了, 其格式如下:
switch  (評估值)  
{
case條件值1:
    敘述區塊1;
    break;
case 條件值2:
     敘述區塊2;
     break;
.
.
case 條件值n:
    敘述區塊n;
    break;
default:
   敘述區塊n+1;
}
上列的格式意義是:當評估值符合條件值1時就執行程式區塊1, 評估值符合條件值2時就執行程式區塊2…, 評估值符合條件值n時就執行程式區塊n, 如果任何條件都不符合則執行程式區塊n+1。 
 例如設計一表單程式網頁, 由瀏覽者選擇他喜歡的網頁背景顏色, 當顏色選定並按下『確定』按鈕後, 就將網頁底色變成瀏覽者所選定的顏色:
<?php
switch ($_POST["color"])
{
    case "y":
      echo "<body bgcolor=yellow>";
    break;
    case "g":
      echo "<body bgcolor=green>";
    break;
    case "b":
      echo "<body bgcolor=blue>";
    break;
}
?>
switch敘述中的條件值, 並不限定每個case內都要有敘述, 還可以是一個範圍的資料, 例如:讓瀏覽者輸入月份, 按下確定按鈕後, 告訴他該月份是哪一個季節:
<?php
switch ($_POST["moon"])
  {
    case 1: case 2: case 3:
          echo "春天";
          break;
    case 4: case 5: case 6:
          echo "夏天";
          break;
    case 7: case 8: case 9:
          echo "秋天";
          break;
    case 10: case 11: case 12:
          echo "冬天";
          break;
    default:
          echo "錯誤";
  }
?>
在switch case敘述區段中, 除了可以使用『{ }』把這些敘述(敘述區塊)包括在其中外, 亦可放棄使用『{ }』來包括敘述, 改用『endswitch;』來做, 格式如下:
switch (評估值):  
case條件值1:
    敘述區塊1;
    break;
case 條件值2:
    敘述區塊2;
     break;
.
.
case 條件值n:
     敘述區塊n;
     break;
default:
      敘述區塊n+1;
end switch;
在switch(評估值)與endswitch;的作法中, 在switch(評估值)之後必須加上『:』冒號代表敘述區段的起始, 而敘述區塊中的每個單行敘述結尾同樣必須加上『;』, 例如
<?php
switch ($_POST["color"]):
    case "y":
      echo "<body bgcolor=yellow>";
    break;
    case "g":
      echo "<body bgcolor=green>";
    break;
    default:
      echo "<body bgcolor=blue>";
end switch;
?>

沒有留言:

張貼留言