:::
5-6 加入 switch 流程控制
一、關於 switch
- 文章標題有個連結為:
<h3><a href="index.php?op=show&id={$news.id}">{$news.title}</a></h3>亦即點下此連結,就會分別傳送
$_GET['op']及$_GET['id']兩個變數給index.php之意 - 取得外來變數的第一個動作便是要過濾之,如:
<?php use yidas\data\Pagination; require_once 'header.php'; // 變數過濾 $id = isset($_REQUEST['id']) ? (int) $_REQUEST['id'] : 0; $op = isset($_REQUEST['op']) ? htmlspecialchars($_REQUEST['op']) : 'index';$op的預設值將之設為index,也就是要顯示文章列表之意,目前雖然設也沒關係,但等到要引入樣板檔時就一定要有一個預設值才行。 - 既然我們已經可以取得自訂的
$op變數,也就是用來告知程式接下來要做什麼,那麼,我們就可以用switch()來做流程控制 switch()的基本用法:switch($變數名稱){ case "值1": 執行動作1; break; case "值2": 執行動作2; break; default: 預設執行動作; break; }- 注意,若是沒有寫
break;,那麼會繼續往下執行。
二、加入 switch 流程控制
- 以
index.php為例,可改這樣:<?php use yidas\data\Pagination; require_once 'header.php'; // 變數過濾 $id = isset($_REQUEST['id']) ? (int) $_REQUEST['id'] : 0; $op = isset($_REQUEST['op']) ? htmlspecialchars($_REQUEST['op']) : 'index'; switch ($op) { // 觀看單一文章 case 'show': $smarty->assign('news', show($id)); break; // 預設為文章列表 default: list($all_news, $paginator) = index($perPage); $smarty->assign('all_news', $all_news); $smarty->assign('paginator', $paginator); break; }- 我們將所有的函式都移到下方,如此,上方比較容易看出整個檔案的流程
- 等一下我們再來產生
show($id)函式即可 - 如此一來,以後我們就可以用
$op來告知同一個檔案,讓該檔案可以執行各種不同的動作。 - 至此,只要畫面沒有變化,那就是做對了。
5-5 將程式函式化以便彈性呼叫