电脑安全

您当前的位置:主页 > 电脑安全 >

php简单 模板技术-网络编程

来源:[db:来源]标题:   标签    编辑:电脑技术全能网 时间:2019-09-20 12:29

原标题:php简单 模板技术-网络编程
   <?php/**php简略 模板技巧* 作者:牛哄哄* QQ:455703030* 申明:我正则写的不隧道,欢送妙手帮我修正一下* 可自在传布、应用,但请保存此信息*/class FLEA_View_NHH{//模板存储名目public $viewDir = null;//缓存存储名目public $cacheDir = null;//能否过滤缓存中过剩空格、Tab、回车public $filterCache = true;//模板中须要表现的数据private $data = array();public function __construct(){$viewConf = (array)FLEA::getAppInf('viewConfig');if (empty($viewConf)) {FLEA::loadClass('FLEA_Exception_ExpectedFile');__THROW(new FLEA_Exception_ExpectedFile('The config file is not found: '.$viewConf));}$this->viewDir = $viewConf['viewDir'];$this->cacheDir = $viewConf['cacheDir'];$this->filterCache = $viewConf['filterCache'];}public function assign($var, $value){$this->data[$var] = $value;}public function display($viewName){$view = $this->viewDir.'/'.$viewName.'.html';$cache = $this->cacheDir.'/'.$viewName.'.php';if (!file_exists($view)) {FLEA::loadClass('FLEA_Exception_ExpectedFile');__THROW(new FLEA_Exception_ExpectedFile('The view file is not found: '.$view));}if (filemtime($view) > @filemtime($cache)) {$this->parseView($view, $cache);}if (file_exists($cache)) {if (!defined('IN_THIS_VIEW')) { define('IN_THIS_VIEW', TRUE); }include($cache);} else {FLEA::loadClass('FLEA_Exception_ExpectedFile');__THROW(new FLEA_Exception_ExpectedFile('The cache file has not read in correctly: '.$cache));}}private function parseView($view, $cache = null){/* 假如模板不存在,则输入过错新闻 */if (!file_exists($view)) {FLEA::loadClass('FLEA_Exception_ExpectedFile');__THROW(new FLEA_Exception_ExpectedFile('The view file is not found: '.$view));}/* 读取模板内容为一个字符串 */$view = file_get_contents($view);/* 将<!--{ }-->调换为{{ }} */$view = str_replace(array('<!--{', '}-->'), array('{{', '}}'), $view);/* 肃清解释 */$view = preg_replace("//{/{/*(.*?)/*/}/}/", '', $view);/* 剖析assign方式引入的变量 */$view = preg_replace('//$([A-Za-z0-9_]+)/', '$this->data[/'//1/']', $view);/* 机器模板外部界说变量 */$view = preg_replace('//$/[([A-Za-z0-9_]+)/]/', '$//1', $view);/* 剖析{{ $var }}基础变量输入标签 */$view = preg_replace('//{/{/s*/$(.+?)/s*/}/}/', '<? echo $//1; ?>', $view);/* 剖析{{ include }}标签 */$view = preg_replace('//{/{/s*include/s+(.+?)/s*/}/}/', '<? include //1; ?>', $view);/* 剖析{{ html }}标签 */$view = preg_replace('//{/{/s*html/s+(.+?)/s*/}/}/', '<? echo file_get_contents(//1); ?>', $view);/* 剖析{{ code }}标签 */$view = preg_replace('//{/{/s*code/s+(.+?)/s*/}/}/', '<? //1; ?>', $view);/* 剖析{{ if }}标签 */$view = preg_replace('//{/{/s*if/s+(.+?)/s*/}/}/', '<? if (//1) { ?>', $view);/* 剖析{{ elseif }}标签 */$view = preg_replace('//{/{/s*elseif/s+(.+?)/s*/}/}/', '<? } elseif(//1) { ?>', $view);/* 剖析{{ while }}标签 */$view = preg_replace('//{/{/s*while/s+(.+?)/s*/}/}/', '<? while (//1) { ?>', $view);/* 剖析{{ foreach }}标签 */$view = preg_replace('//{/{/s*foreach/s+(.+?)/s*/}/}/', '<? foreach (//1) { ?>', $view);/* 剖析{{ for }}标签 */$view = preg_replace('//{/{/s*for/s+(.+?)/s*/}/}/', '<? for (//1) { ?>', $view);/* 剖析{{ else }}标签 */$view = preg_replace('//{/{/s*else/s*/}/}/', '<? } else { ?>', $view);/* 剖析{{ /while }},{{ /if }},{{ /for }},{{ /foreach }}标签 */$view = preg_replace('#/{/{/s*/[a-z]+/s*/}/}#', '<? } ?>', $view);/* 递归剖析嵌套的子模板 */if (preg_match_all('//{/{/s*view/s+(.+?)/s*/}/}/', $view, $viewsInView)) {/* 轮回剖析此模板中全部子模板,并将剖析成果保留到数组$views */$viewInViews = array();foreach ($viewsInView[1] as $viewInView) {$viewInViews[] = $this->parseView(eval('return '.$viewInView.';'));}/* 将该模板中全部子模板的标签分辨调换为其对应的剖析成果 */$view = str_replace($viewsInView[0], $viewInViews, $view);}/* 兼并相邻标签的剖析成果 */$view = preg_replace('//?>/s*</?/', '', $view);/* 假如开启了缓存过滤,则过滤掉此中过剩空格、Tab、回车 */if ($this->filterCache == true) {$view = preg_replace('//s+/', ' ', $view);}/* 假如是在剖析子模板,则前往剖析成果 */if ($cache == null) { return $view; }/* 参加避免间接拜访缓存的代码 */$view = '<? if (!defined("IN_THIS_VIEW")) exit("The page is not found!"); ?>'.$view;/* 将模板剖析成果写入缓存文件 */@file_put_contents($cache, $view);}}/*** 1、设置* 设置文件请在FLEA的设置文件中修正* 格局为:* 'viewConfig' => array(* 'viewDir' => '', //模板文件门路* 'cacheDir' => '', //缓存文件门路* 'filterCache' => true, //能否在模板剖析结束后对缓存停止优化* );* * 2、标签* 模板文件后缀名为.html* 标签同时支撑两种<!--{ }-->或{{ }},你能够依据情形自在应用* 1、{{* *}} 增加解释,只支撑单行,多行的不晓得怎样写,愁闷* 2、{{ $abc }} 输入一个变量,变量的格局化输入请应用<{code }>标签履行一个函数停止格局化输入* 3、{{ $[abc] }} 输入一个模板外部界说的变量,变量名要用中括号括起来* 4、{{ include 'abc/bcd.php' }} 包括一个静态文件,这个文件中可应用经过assign方式参加的变量和模板外部界说的变量,但弗成以应用本引擎支撑的标签* 5、{{ html 'abc/bcd.html' }} 包括一个动态文件,此标签仅在PHP5下可用,被包括的文件中弗成应用任何变量或标签,此标签可取得几倍于include标签的机能* 6、{{ code echo substr($abc,1) }} 履行一段PHP代码,包含赋值,函数等等* 7、{{ if $abc==1 }}和{{ elseif $abc==2 }}和{{ /if }} 推断,分支* 8、{{ while $abc<1000 }}和{{ /while }} while轮回* 9、{{ for $i=0;$i<1000;$i++ }}和{{ /for }} for轮回* 10、{{ foreach $abc as $k => $v }}和{{ /foreach }} foreach轮回* 11、{{ view 'abc/bcd.html' }} 嵌套另一个模板,支撑模板的无穷嵌套* * 留神:* 1,include,html,view标签可应用常量来指定门路,如许会愈加便利* 2,assign引入的变量与模板外部界说的变量采纳差别的定名空间,因而可重名* 3,关于while,foreach,for轮回须要引入的变量,最好采纳模板外部界说的变量* 4,模板外部界说变量 {{ code $[i]=1 }}* 5,全部标签外部弗成包括{}大括号,不然无奈准确剖析* 6,全部标签的参数局部必需写为单行,不然无奈准确剖析* 7,在调试时,为便利检查编译成果可封闭缓存优化,公布时,倡议开启,可进步机能* 8,此模板引擎仅可于FLEA下应用,若需不依靠FLEA的版本,请自行修正* 9,标签中的参数应用PHP的语法* 10,数组的援用与输入{{ $abc['id'] }}* 11,全部标签一概小写* 12,标签的参数中弗成包括{{或}},不然会剖析过错*/?>

上一篇:正则表达式一-网络编程

下一篇:没有了