Just for fun——PHP框架之簡單的模板引擎

原理

使用模板引擎的好處是數據和視圖分離。一個簡單的PHP模板引擎原理是php

  1. extract數組($data),使key對應的變量能夠在此做用域起效html

  2. 打開輸出控制緩衝(ob_start)數組

  3. include模板文件,include遇到html的內容會輸出,可是由於打開了緩衝,內容輸出到了緩衝中測試

  4. ob_get_contents()讀取緩衝中內容,而後關閉緩衝ob_end_clean()this

實現

封裝一個Templatespa

<?php

class Template {
    private $templatePath;
    private $data;

    public function setTemplatePath($path) {
        $this->templatePath = $path;
    }

    /**
     * 設置模板變量
     * @param $key string | array
     * @param $value
     */
    public function assign($key, $value) {
        if(is_array($key)) {
            $this->data = array_merge($this->data, $key);
        } elseif(is_string($key)) {
            $this->data[$key] = $value;
        }
    }


    /**
     * 渲染模板
     * @param $template
     * @return string
     */
    public function display($template) {
        extract($this->data);
        ob_start();
        include ($this->templatePath . $template);
        $res = ob_get_contents();
        ob_end_clean();
        return $res;
    }

}

測試

test.php.net

<?php

 include_once './template.php';

 $template = new Template();
 $template->setTemplatePath(__DIR__ . '/template/');
 $template->assign('name', 'salamander');
 $res = $template->display('index.html');


 echo $res;

template目錄下index.html文件code

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>模板測試</title>
    <style>
        * {
            padding: 0;
            margin: 0;
            box-sizing: border-box;
        }
        h1 {
            text-align: center;
            padding-top: 20px;
        }
    </style>
</head>
<body>
    <h1><?=$name?></h1>
</body>
</html>

clipboard.png

clipboard.png

Tip

爲何display要返回一個字符串呢?緣由是爲了更好的控制,嵌入到控制器類中。
對於循環語句怎麼辦呢?這個的話,請看流程控制的替代語法htm

相關文章
相關標籤/搜索