:::

6-4-3 加入 switch 流程控制

一、關於 switch

  1. 文章標題有個連結為:
    <a href="{$url}/index.php?op=show&id={$news.id}">{$news.title}</a>

    亦即會分別傳送 $_GET['op']$_GET['id'] 兩個變數給 index.php 之意

  2. 取得外來變數的第一個動作便是要過濾之,如:
    // 過濾外來變數
    $p = isset($_REQUEST['p']) ? (int) $_REQUEST['p'] : 1;
    $id = isset($_REQUEST['id']) ? (int) $_REQUEST['id'] : 0;
    $op = isset($_REQUEST['op']) ? filter_var($_REQUEST['op'], FILTER_SANITIZE_STRING) : 'index';
    

    $op的預設值將之設為 index,也就是要顯示文章列表之意,目前雖然設也沒關係,但等到要引入樣板檔時就一定要有一個預設值才行。

  3. 既然我們已經可以取得自訂的 $op 變數,也就是用來告知程式接下來要做什麼,那麼,我們就可以用switch() 來做流程控制
  4. switch() 的基本用法:
    switch($變數名稱){
        case "值1":
            執行動作1;
            break;
    
        case "值2":
            執行動作2;
            break;
    
        default:
            預設執行動作;
            break;
    }

     

  5. 注意,若是沒有寫 break;,那麼會繼續往下執行。

二、加入 switch 流程控制

  1. index.php為例,可改這樣:
    <?php
    use JasonGrimes\Paginator;
    require_once 'header.php';
    
    // 過濾外來變數
    $p = isset($_REQUEST['p']) ? (int) $_REQUEST['p'] : 1;
    $id = isset($_REQUEST['id']) ? (int) $_REQUEST['id'] : 0;
    $op = isset($_REQUEST['op']) ? filter_var($_REQUEST['op'], FILTER_SANITIZE_STRING) : 'index';
    
    switch ($op) {
        // 觀看單一文章
        case 'show':
            $news = show($id);
            $smarty->assign('news', $news);
            break;
    
        // 預設為文章列表
        default:
            $all_news = index($p);
            $smarty->assign('all_news', $all_news);
            break;
    }
    
    $smarty->display('index.tpl');
    
    // 列出所有文章
    function index($p)
    {
        ...略...
    }
    
    // 取得縮圖
    function get_thumbs($id)
    {
        ...略...
    }
    
    // 製作摘要
    function get_summary($content)
    {
        ...略...
    }
    

     

    1. 我們將所有的函式都移到下方,如此,上方比較容易看出整個檔案的流程
    2. 如此一來,以後我們就可以用 $op 來告知同一個檔案,讓該檔案可以執行各種不同的動作。
    3. 至此,只要畫面沒有變化,那就是做對了。

:::

書籍目錄

展開 | 闔起

https%3A%2F%2Fcampus-xoops.tn.edu.tw%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbsn%3D52%26tbdsn%3D1822

計數器

今天: 4224422442244224
昨天: 5069506950695069
總計: 5134672513467251346725134672513467251346725134672