$user = 'ZhangRongQuan';

$method = 'What are you doing?';

//导入类文件

php例子PHP应用模板的简略例子 Ruby

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 '<p>我进行了编译</p>';

//编译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, "<?php echo \$this->arr['$1'] ?>", $conts);

//

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

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

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

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

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

//

}

//创建PHP编译文件

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

}

} temp.tpl

<h1>{$user}</h1>

<h2>{$method}</h2>