加入收藏 | 设为首页 | 会员中心 | 我要投稿 成都站长网 (https://www.028zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP使用模板的简单例子

发布时间:2023-01-08 17:31:24 所属栏目:PHP教程 来源:网络
导读: 这里包含3个文件:test.php执行文件、parser.php编译类、temp.tpl模板
test.php
$user = 'ZhangRongQuan';
$method = 'What are you doing?';
//导入类文件
require_once

这里包含3个文件:test.php执行文件、parser.php编译类、temp.tpl模板

test.php

$user = 'ZhangRongQuan';

$method = 'What are you doing?';

//导入类文件

require_once './parser.php';

//创建对象

$cms = parser::inc();

//往数组添加元素

$cms->assign('user', $user);

//往数组添加元素

$cms->assign('method', $method);

//编译模板文件并载入php或者缓存文件

$cms->display('./temp.tpl');

parser.php

class parser{

private

//用数组来存放模板变量的内容,键值就是变量名

$arr = array(),

//静态的缓存文件

$fn,

//编译文件

$pn;

private

static $int;//用于单例

//初始化传入的参数是模板文件

protected function __construct(){

$fname = 'c_' . md5('parser');

//静态的缓存文件

$this->fn = './' . $fname . '.htm';

//编译文件

$this->pn = './' . $fname . '.php';

}

//单例

public static function inc(){

if(!self::$int instanceof self)

self::$int = new self();

return self::$int;

}

//给数组赋值,键值就是变量名

public function assign($key, $val){

if(!!$key)

//给模板变量赋值,key是变量名

$this->arr[$key] = $val;

//****************************************

//用数组来接收变量值,可以在后面的编译替换时,

//让模板的变量与值相对应,如果直接使用变量

//来接收,会造成模板里所有的变量的值都一样

//*****************************************

}

//加载文件,并根据条件创建缓存文件

public function display($cname){

//获取当前调用本类的文件的文件名

$currentFile = './' . basename($_SERVER['PHP_SELF']);

//***********************************************

//如果存在缓存文件,并且缓存文件修改的时间比编译

//文件晚,并且编译文件修改的时间比当前文件晚,则

//直接载入缓存文件

//***********************************************

$fn = $this->fn;

$pn = $this->pn;

if(file_exists($fn) && $this->copTime($fn, $pn) && $this->copTime($pn, $currentFile)){

//测试用,看条件是否成立,条件成立即相关内容没有发生变化

echo rand();

//内容不变时直接载入缓存文件,无需重写缓存文件

include_once $fn;

}else{

echo '

我进行了编译

';

//编译PHP文件

$this->par($cname);

//载入编译文件

include_once $pn;

//内容发生了变化,要重写缓存文件

file_put_contents($this->fn, ob_get_contents());

}

}

//判断文件的修改时间

private function copTime($an, $dn){

return filemtime($an) >= filemtime($dn);

}

//编译PHP文件

private function par($cname){

//导入模板文件,获取文件的内容

$conts = file_get_contents($cname);

//正则表达式

$reg = '/\{\$([\w]+)\}/';

//替换

if(preg_match($reg, $conts)){

$conts = preg_replace($reg, "", $conts);

//********************************************************

// \$this->arr['$1']里的['$1']可以写成['\\1']表示正则里的第一个分组,

// 就是正则的()里的内容(这是正则的知识),前面使用数组在这

//里就可以保证变量值是对应我们所要的,比如,模板里的变量是

//{$user},那这所替代的是$this->arr['user']php模板,而数组arr的user元素恰

//好对应的值是$user,这个在assign方法里已经赋值过了

//********************************************************

}

//创建PHP编译文件

file_put_contents($this->pn, $conts);

}

}

temp.tpl

{$user}

{$method}

(编辑:成都站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!