PHP 实现自己的模板引擎(一)——准备工作

全栈 shanhuhai 4470℃ 1评论

大家都知道 MVC 模式, 在大部分的 PHP 框架中都实现了这个模式。
我们在做网站的时候,一个必不可少的工作就是套模板了,套模板就是一个跟 V(view)层相关的工作,所谓套模板就是将静态的html页面中需要后端动态生成的数据用特定的模板语法来替换。今天教大家实现一个自己的模板类,当你学会了做自己的模板引擎,你可以设计自己的模板语法,不再被限制到别人制定的条条框框里。

PHP 是一门模板语言

我们听说过各种的模板引擎类库,例如有名的 Smarty, Twig 等等,他们都设计了一套自己的模板语法,其实 PHP 本身就是一种模板语言,我们都见过这样的代码:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <?php $site_name = "dahouduan.com"; ?>
    <?php echo $site_name; ?>
</body>
</html>

他看起来是一段 HTML 代码,但是当你将它保存为 .php 文件时,它是可以运行的,而且其中的 PHP 代码也被运行了。 PHP 天生可以跟 HTML 混写,所以你可以轻松的用 PHP 控制想要输出到浏览器端的 HTML 代码。

这时候你可能会问,既然这样我们还要模板引擎做什么?

答案是为了将业务逻辑和视图展现尽量的分离,如果没有模板引擎,我们可能会在视图里写过多业务逻辑,当功能越来越复杂时,我们的程序会越发的难以维护。如果你理解了 MVC 的思想,结合PHP的语言特点,你就不会问出这个问题。

预备知识

本来只想写一篇就完结,写到这里想了想好像要实现自己的模板语法不是几句话就能说完的,所以今天先介绍几个要实现模板引擎必须要知道的 PHP 函数

extract 函数

首先是 extract() 函数, 他用来将数组中的“键”或者叫“key”或者叫“索引”作为变量名,将“键”对应的“值”作为变量的值。

例如下面的代码:

<?php
$article = [
    "title"=>"如何实现自己的模板引擎",
    "date"=>"2017-08-08",
    "tags"=>['php', '模板'],
];

extract($article);
//这时候就生成三个变量, $title, $date, $tags
echo $title."\n";
echo $date."\n";
print_r($tags);

extract 一共有三个参数,后面两个参数都是用来控制当数组的“键”与已有变量发生冲突中如何处理。具体细节还是看手册吧。http://php.net/manual/zh/function.extract.php

array_merge 函数

function config($config){
    $defaultConfig = [
     'tplPath' => './view',
     'suffix' => '.php'
    ];

    // 最终配置
    $config = array_merge($defaultConfig, $config);
    return $config;
}


$config = ['tplPath' => './tpl'];
$config = config($config);

array_merge 函数用来,将多个数组合并为一个数组,我经常用它来将用户传递进来的配置与默认的配置合并,拿到最终的配置,如果不熟悉 array_merge 函数,还是去复习下吧。

转载请注明:大后端 » PHP 实现自己的模板引擎(一)——准备工作

喜欢 (2)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(1)个小伙伴在吐槽
  1. 学习学习
    Yiven2018-10-30 17:32 回复