黑马程序员技术交流社区
标题: 【郑州校区】论PHP模板的简单高效实现 [打印本页]
作者: 谷粒姐姐 时间: 2018-4-20 11:28
标题: 【郑州校区】论PHP模板的简单高效实现
本帖最后由 谷粒姐姐 于 2018-4-20 11:32 编辑
大家都知道PHP是世界上最好的语言,PHP在项目开发中的灵活性是个非常重要的优点,非常适合经常变动的业务逻辑和页面内容,当然都离不开一个好用的模板引擎,市面上最常见的PHP模板引擎是smarty,但是smarty功能十分丰富,有些重量级了.
那有没有更好的模板引擎呢? 先来探讨一下模板引擎的几大特点: 书写简单,执行速度,逻辑表达,方便扩展等.从这几方面看最适合的模板引擎就是PHP本身了,所有的要求都能满足要求,不管是smarty还是其他的模板引擎,在执行速度,逻辑表达,方便扩展的方面都不可能超过PHP本身,因为他们都是PHP实现的.唯一的短板就是书写简单这一方面.
那我们怎么补齐这块短板呢? 其实完全可以自己实现一个模板引擎语法规则,然后配合上一个预编译过程即可,把自定义个的模板引擎语法,编译成原生PHP代码即可,既补足了书写简单的短板,也没有对执行速度,逻辑表达,方便扩展等方面有任何损失.并且编译只需一次,编译一次以后模板页面没有变动,再也不需要第二次处理,配合OPCODE缓存更加强大,更能享受到PHP版本升级带来的性能红利.
那怎么来实现呢? 在PHP页面中使用的最多的就是<?php echo $row["title"]; ?>来输出一个变量内容,写起来键盘敲击次数还是比较多的.完全可以实用模板语法{{$row.title}}代替,从原来的28个字符减少到了14个字符,包括if else foreach include等模板语法,只需要一个正则替换,即可实现一个简单高效的模板引擎.
[AppleScript] 纯文本查看 复制代码
<table>
{{foreach $rows as $i => $row}}
<tr><td>{{$row["username"]}}</td><td>{{$row["password"]}}</td></tr>
{{endforeach}}
</table>
PHP页面
[AppleScript] 纯文本查看 复制代码
<table>
<?php foreach ($rows as $i => $row) { ?>
<tr><td><?php echo $row["username"]; ?></td><td><?php echo $row["password"]; ?></td></tr>
<?php } ?>
</table>
核心代码示意
[AppleScript] 纯文本查看 复制代码
// 此代码已被精简
$tmpl = preg_replace('/{{if (.+?)}}/', '<?php if ($1) { ?>', $tmpl);
$tmpl = preg_replace('/{{else}}/', '<?php } else { ?>', $tmpl);
$tmpl = preg_replace('/{{elseif (.+?)}}/', '<?php } elseif ($1) { ?>', $tmpl);
$tmpl = preg_replace('/{{endif}}/', '<?php } ?>', $tmpl);
$tmpl = preg_replace('/{{foreach (.+?)}}/', '<?php foreach ($1) { ?>', $tmpl);
$tmpl = preg_replace('/{{endforeach}}/', '<?php } ?>', $tmpl);
$tmpl = preg_replace('/{{include (.+?)}}/', '<?php include $1.php; ?>', $tmpl);
$tmpl = preg_replace('/{{(.+?)}}/', '<?php echo $1; ?>', $tmpl);
好了,完美解决模板引擎的简单高效需求,还有什么自己的想法都可以添加进来哦!
作者: IWantToBe... 时间: 2018-4-24 21:20
前来学习一下。。。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |