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

Smarty模板类内部原理实例分析

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

这篇文章主要介绍了Smarty模板类内部原理,结合实例形式模拟Smarty模板类的定义与应用,需要的朋友可以参考下

本文实例讲述了Smarty模板类内部原理。分享给大家供大家参考,具体如下:

之前在学习ThinkPHP的时候,有接触到Smarty模板类,但是一直不知道其内部实现的原理,博主今天终于知道了其内部原理,其实也挺简单的,然后写了一个迷你版的Smarty模板类,对理解其内部原理有了很大的帮助。

1、迷你版Smarty类

首先上代码,最后再进行讲解。

项目结构图

MiniSmarty类代码(MiniSmarty.class.php)

 tpl_var[$key] = $value; } /** * 编译模板,并引入编译后的文件 * @param str $template 模板文件 * @return void */ public function display($template){ $compile_file = $this->compile($template); include($compile_file); } /** * 将模板文件编译成php文件 * @param str $template 模板文件名 * @return str      编译文件名 */ private function compile($template){ $template_file = $this->template_dir.'/'.$template; //读取模板文件中的内容 $source = file_get_contents($template_file); //判断是否需要再次生产编译文件 $compile_file = $this->compile_dir.'/'.$template.'.php'; //如果存在编译文件且编译文件的修改时间比模板文件大,则不用再次编译,直接返回文件路径 if(file_exists($compile_file) && filemtime($compile_file) > filemtime($template_file)){ return $compile_file; } //解析{$}为<?php echo 等操作 $source = str_replace('{$', 'tpl_var[\'', $source); $source = str_replace('}', '\'];?>', $source); //生成编译文件 file_put_contents($compile_file, $source); //返回编译后的文件路径 return $compile_file; } } ?> 

测试模板类代码(testSmarty.php)

 template_dir = './template'; $Smarty->compile_dir = './compile'; //2、给模板对象赋值 $title = '两会召开'; $content = '好奶粉,好会议,好新闻'; $Smarty->assign('title',$title); $Smarty->assign('content',$content); //3、显示模板 $template = 'template.html'; $Smarty->display($template); ?> 

模板文件(template.html)

   <title>{$title}</title> <h3>{$content}</h3>

编译后的文件(template.html.php)

   <title>tpl_var['title'];?></title> <h3>tpl_var['content'];?></h3>

代码都贴完了,最后解释一下。在测试模板类(testSmarty.php)文件中,首先是引入模板类文件,实例化模板对象,然后给模板对象赋值,最后显示模板。在模板类(MiniSmarty.class.php)文件中,有3个属性和3个方法,属性分别是template_dircompile_dir‘和tpl_var,含义分别是模板文件的路径、编译后文件的路径、模板对象的变量。3个方法分别是assigndisplaycompile,assign方法是给模板对象赋值,display方法是编译模板文件,并引入(显示)编译后的文件,compile方法是编译模板文件。编译模板文件的过程主要是将模板文件中的{$标签}解析成 等php代码。

2、Smarty原理分析

工作流程

(1)把需要显示的全局变量,赋值,塞到对象的内部属性中的一个数组里
(2)然后编译模板,将{$标签}解析成相应的php echo 代码
(3)引入编译后的php文件

使用步骤

(1)Smarty是一个类,要使用的话,必须引入在进行实例化
(2)使用assign给模板赋值
(3)使用display方法【从编译到输出】

Smarty的缺点

(1)编译模板,浪费时间
(2)要把变量再重新赋值到对象的属性中,增大了开销

更多关于Smarty相关内容感兴趣的读者可查看本站专题:《smarty模板入门基础教程》、《PHP模板技术总结》、《PHP基于pdo操作数据库技巧总结》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php字符

来源gao!%daima.com搞$代*!码网

串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家基于smarty模板的PHP程序设计有所帮助。

以上就是Smarty模板类内部原理实例分析的详细内容,更多请关注gaodaima搞代码网其它相关文章!


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

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

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

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

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