标签:
构建基础架构
在项目文件夹(自定义)下创建
(1)核心目录:WQ
(2)模板目录:MoBan
(3)编译目录:BianYi
(4)创建配置文件: config.ini.php
<?php
//获取文件所在目录
$Gen=dirname(__FILE__);
//设置模板目录
define(‘MoBan‘,$Gen.‘/MoBan/‘);
//设置核心类目录
define(‘WQ‘,$Gen.‘/WQ/‘);
//设置编译文件目录
define(‘BianYi‘,$Gen.‘/BianYi/‘);
//加载核心类
include WQ.‘WQ.class.php‘;
//调用核心类
$wq=new WQ();
(5)在核心目录WQ下创建系统核心类WQ.class.php
<?php
//系统核心类
class WQ
{
//变量成员(一个可以放下无数变量的数组)
private $BianLiang = array();
//构造方法
public function __construct()
{
if(!is_dir(MoBan) || !is_dir(BianYi))
{
exit("模板目录:MoBan 或 编译目录:BianYi 不存在!请手动创建");
}
}
//注册变量的方法
public function assign($key,$value)
{
if(empty($key))
{
exit("错误:注册变量名不能为空");
}
$this->BianLiang["$key"]=$value;
}
//调用模板的方法
public function display($MoBanMing)
{
//获取模板路径
$MoBanLuJing=MoBan.$MoBanMing;
//容错,当模板不存在时
if(!file_exists($MoBanLuJing))
{
exit(‘错误:模板文件不存在‘);
}
//编译文件路径
$BianYiLuJing=BianYi.md5($MoBanMing).$MoBanMing.‘.php‘;
//生成编译文件
if(!file_exists($BianYiLuJing) || filemtime($BianYiLuJing)<filemtime($MoBanLuJing))
{
//引入解析类文件,实例化解析类并调用解析方法
include WQ.‘JieXi.class.php‘;
$JieXi= new JieXi($MoBanLuJing);
$JieXi->jiexi($BianYiLuJing);
}
//载入编译文件
include $BianYiLuJing;
}
}
(5)在核心目录WQ下创建模板解析类JieXi.class.php
<?php
//模板解析类
class JieXi
{
private $MoBanNeiRong;
//构造方法
public function __construct($MoBanLuJing)
{
if(!$this->MoBanNeiRong=file_get_contents($MoBanLuJing))
{
exit(‘错误:模板文件读取错误‘);
}
}
//对外公共方法
public function jiexi($BianYiLuJing)
{
//调用普通变量解析法
$this->jiexi_bianliang();
//调用foreach标签解析法
$this->jiexi_foreach();
//生成编译文件
if(!file_put_contents($BianYiLuJing,$this->MoBanNeiRong))
{
exit(‘错误:编译文件生成失败‘);
}
}
//解析普通变量
private function jiexi_bianliang()
{
//赋值变量解析正则
$ZhengZe=‘/<\{\$([\w]+)\}>/‘;
if(preg_match($ZhengZe,$this->MoBanNeiRong))
{
$TiHuan="<?php echo \$this->BianLiang[‘$1‘] ?>";
//替换解析模板变量
$this->MoBanNeiRong=preg_replace($ZhengZe,$TiHuan,$this->MoBanNeiRong);
}
}
//解析foreach标签
private function jiexi_foreach()
{
//赋值解析正则
$ZhengZe="/<\{foreach\s+([\w]+)\(([\w]+),([\w]+)\)\}>/";
$ZhengZe_end="/<\{\/foreach\}>/";
$ZhengZe_nei="/<\{([\w]+)\}>/";
if(preg_match($ZhengZe,$this->MoBanNeiRong))
{
if(preg_match($ZhengZe_end,$this->MoBanNeiRong))
{
//替换模板标签foreach
$this->MoBanNeiRong=preg_replace($ZhengZe_end,‘<?php } ?>‘,$this->MoBanNeiRong);
$TiHuan="<?php foreach(\$this->BianLiang[‘$1‘] as \$$2 => \$$3){ ?>";
$this->MoBanNeiRong=preg_replace($ZhengZe,$TiHuan,$this->MoBanNeiRong);
if(preg_match($ZhengZe_nei,$this->MoBanNeiRong))
{
//替换foreach标签索引及变量
$TiHuan="<?php echo \$$1 ?>";
$this->MoBanNeiRong=preg_replace($ZhengZe_nei,$TiHuan,$this->MoBanNeiRong);
}
}
else
{
exit("错误:foreach标签没有封闭");
}
}
}
}
标签:
原文地址:http://www.cnblogs.com/lovling/p/5662913.html