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
來告知同一個檔案,讓該檔案可以執行各種不同的動作。
- 至此,只要畫面沒有變化,那就是做對了。