构建基础架构
在项目文件夹(自定义)下创建
(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标签没有封闭"); } } } }
时间: 2024-10-01 22:18:24