热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

正则表达式php模板,PHP中正则表达式回顾(4)编写一个非常简单而且山寨的smarty模板引擎...

PHP的正则表达式今天就结束了,遥想几年前初次接触的时候,感觉这玩意真心玩不转啊,而时至今日,感觉这也没有什么难以理解的&#

PHP的正则表达式今天就结束了,遥想几年前初次接触的时候,感觉这玩意真心玩不转啊,而时至今日,感觉这也没有什么难以理解的,确实还是有很大进步的,尤其是对smarty模板引擎有了一个更为清晰的认识。正则表达式学到最后,总是会抛出这个编写一个山寨的smarty模板引擎的话题出来练练手,今天就在大师的指导下,编写了这么一个山寨smarty,作为这次复习正则的一个句点吧。

class template{

//存储模板引擎源文件目录

private $templateDir;

//编译后的文件目录

private $compileDir;

//边界符号左边界

private $leftTag="{#";

//边界符号右边界

private $rightTag="#}";

//当前正在编译的模板文件名

private $currentTemp='';

//当前源文件中的html代码

private $outputHtml;

//变量池

private $varPool=array();

//构造函数 传入模板文件目录  编译文件目录

public function __construct($templateDir,$compileDir,$leftTag=null,$rightTag=null){

$this->templateDir=$templateDir;

$this->compileDir=$compileDir;

if(!empty($leftTag))$this->leftTag=$leftTag;

if(!empty($rightTag))$this->rightTag=$rightTag;

}

//往变量池中写入数据

public function assign($tag,$var){

$this->varPool[$tag]=$var;

}

//从变量池中取出数据的方法

public function getVar($tag){

return $this->varPool[$tag];

}

//获得源文件内容

public function getSourceTemplate($templateName,$ext='.html'){

$this->currentTemp=$templateName;

//拿到完整路径

$sourceFilename=$this->templateDir.$templateName.$ext;

//获得源文件中的html代码

$this->outputHtml=file_get_contents($sourceFilename);

}

//创建编译文件

public function compileTemplate($templateName=null,$ext='.html'){

$templateName=empty($templateName)?$this->currentTemp:$templateName;

//开始正则匹配

$pattern='/'.preg_quote($this->leftTag);

$pattern.=' *$([a-zA-Z]w*) *';

$pattern.=preg_quote($this->rightTag).'/';

$this->outputHtml=preg_replace($pattern, 'getVar('$1') ?>', $this->outputHtml);

//编译文件完整路径

$compileFilename=$this->compileDir.md5($templateName).$ext;

file_put_contents($compileFilename, $this->outputHtml);

}

//模板输出

public function display($templateName=null,$ext='.html'){

$templateName=empty($templateName)?$this->currentTemp:$templateName;

include_once $this->compileDir.md5($templateName).$ext;

}

}

$baseDir=str_replace('', '/', dirname(__FILE__));

$temp=new template($baseDir.'/source/',$baseDir.'/compiled/');

$temp->assign('title','学PHP的小蚂蚁');

$temp->assign('name','小蚂蚁');

$temp->getSourceTemplate('index');

$temp->compileTemplate();

$temp->display();

?>

类库很简单,主要是领悟一下模板引擎的工作思路,顺便在领悟一下OOP的编程思路。

preg_match_all()不但能获取总模式,还能将子模式匹配出来。0键为总模式匹配结果。1~n为子模式。

preg_replace()同理  $1 和 1 是一样的。

{#$title#}

我的名字是:{#$name#}



推荐阅读
author-avatar
UJXo小妖春日望美
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有