A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 谷粒姐姐 于 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);
好了,完美解决模板引擎的简单高效需求,还有什么自己的想法都可以添加进来哦!

1 个回复

倒序浏览
前来学习一下。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马