• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

php模板引擎技术容易实现

php 搞代码 4年前 (2022-01-24) 17次浏览 已收录 0个评论

php模板引擎技术简单实现

用了smarty,tp过后,也想了解了解其模板技术是怎么实现,于是写一个简单的模板类,大致就是读取模板文件->替换模板文件的内容->保存或者静态化

tpl.class.php主要解析

  assign 方法实现

<span style="color: #008000">        /*</span><span style="color: #008000">*          * 模板赋值操作          * @param mixed $tpl_var 如果是字符串,就作为数组索引,如果是数组,就循环赋值          * @param mixed $tpl_value 当$tpl_var为string时的值,默认为 null          </span><span style="color: #008000">*/</span>        <span style="color: #0000ff">public</span> function assign($tpl_var,$tpl_value=<span style="color: #0000ff">null</span><span style="color: #000000">){            </span><span style="color: #0000ff">if</span>(is_array($tpl_var) && count($tpl_var) > <span style="color: #800080">0</span><span style="color: #000000">){                </span><span style="color: #0000ff">foreach</span> ($tpl_var <span style="color: #0000ff">as</span> $k =><span style="color: #000000"> $v) {                    $</span><span style="color: #0000ff">this</span>->tpl_vars[$k] =<span style="color: #000000"> $v;                }            }elseif($tpl_var){                $</span><span style="color: #0000ff">this</span>->tpl_vars[$tpl_var] =<span style="color: #000000"> $tpl_value;            }        }</span>

fetch 方法实现

         <span style="color: #008000">/*</span><span style="color: #008000">*           * 生成编译文件           * @param string $tplFile 模板路径           * @param string $comFile 编译路径           * @return string          </span><span style="color: #008000">*/</span>        <span style="color: #0000ff">private</span><span style="color: #000000"> function fetch($tplFile,$comFile){            </span><span style="color: #008000">//</span><span style="color: #008000">判断编译文件是否需要重新生成(编译文件是否存在或者模板文件修改时间大于编译文件的修改时间)</span>            <span style="color: #0000ff">if</span>(!file_exists($comFile) || filemtime($tplFile) ><span style="color: #000000"> filemtime($comFile)){                </span><span style="color: #008000">//</span><span style="color: #008000">编译,此处也可以使用ob_start()进行静态化</span>                $content = $<span style="color: #0000ff">this</span>-><span style="color: #000000">tplReplace(file_get_contents($tplFile));                file_put_contents($comFile, $content);            }        }            </span>

简单编译方法:按照规则进行正则替换

        <span style="color: #008000">/*</span><span style="color: #008000">*          * 编译文件          * @param string $content 待编译的内容          * @return string          </span><span style="color: #008000">*/</span> <div style="color:transparent">本&文来源gaodai^.ma#com搞#代!码网</div><strong>搞gaodaima代码</strong>       <span style="color: #0000ff">private</span><span style="color: #000000"> function tplReplace($content){            </span><span style="color: #008000">//</span><span style="color: #008000">转义左右定界符 正则表达式字符</span>            $left = preg_quote($<span style="color: #0000ff">this</span>->left_delimiter,<span style="color: #800000">'</span><span style="color: #800000">/</span><span style="color: #800000">'</span><span style="color: #000000">);            $right </span>= preg_quote($<span style="color: #0000ff">this</span>->right_delimiter,<span style="color: #800000">'</span><span style="color: #800000">/</span><span style="color: #800000">'</span><span style="color: #000000">);            </span><span style="color: #008000">//</span><span style="color: #008000">简单模拟编译 变量</span>            $pattern =<span style="color: #000000"> array(                    </span><span style="color: #008000">//例如</span><span style="color: #008000">{$test}</span>                    <span style="color: #800000">'</span><span style="color: #800000">/</span><span style="color: #800000">'</span>.$left.<span style="color: #800000">'</span><span style="color: #800000">\$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)</span><span style="color: #800000">'</span>.$right.<span style="color: #800000">'</span><span style="color: #800000">/i</span><span style="color: #800000">'</span><span style="color: #000000">                );            $replace </span>=<span style="color: #000000"> array(                    </span><span style="color: #800000">'</span><span style="color: #800000"><?php echo $this->tpl_vars[\'${1}\']; ?></span><span style="color: #800000">'</span><span style="color: #000000">                );            </span><span style="color: #008000">//</span><span style="color: #008000">正则处理</span>            <span style="color: #0000ff">return</span><span style="color: #000000"> preg_replace($pattern, $replace, $content);        }</span>


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:php模板引擎技术容易实现
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址