大家都知道 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 实现自己的模板引擎(一)——准备工作