admin 管理员组文章数量: 1184232
2024年4月29日发(作者:words怎么读)
<.<<r0 曼 坠 ! 呈 缠塞堕
PHP编译型模板的设计与实现
◆徐杰
摘要:本文从php模板的原理出发,介绍了编译型模板的特点,并用笔者的
实践详细描述了编译型模板的实现细节,主要介绍了www.phparticle.net中使用
的PHPArticle所采用的自主设计的高效编译型模板,ikphp ̄序效率能够发挥到最
好,提高服务器的利用率, ̄:php的开发者能够从中受到一些启发和帮助。
关键词:php;phpSg,- ̄;MVC;编译型模板
一
、
模板设计的关键
为什么是编译型模板?什么叫编译型模板?现在
国外有个Smarty模板,他就是编译型模板。但是由于其
现在的大多数模板的设计都还是主要停留在界面设
计与程序设计相分离上,使界面设计与程序设计可以分
工同步进行,提高了开发的效率。模板从最初设计到现
功能非常强大,使用起来比较复杂,对于初学者比较难
掌握。就是由于它的编译型这个特点,使一部分人对他
的情有独钟。那为什么选择编译型呢?答案就是,编译
型能够提高程序运行效率。大家都知道什么是编译,例
如c语言写的程序,最后要编译成二进制机器码,让计
算机能够“阅读”并执行。或许你会问,PHP是脚本语
言,是解析执行的,哪来的编译啊?其实我们说的编
译,是从广义上来说的编译。C语言到机器码是编译,
模板代码到PHP执行代码的转换,这个过程,是不是也
在,其主要目的还是实现界面设计与程序设计相分离。
一
个很常用的PHP工具类——PHPLIB,它里面就带了
个模板类,简单易用,一直都是PHP开发者选择的对
但是有些模板引擎,为了实现把两者完全独立开
一
象。
来,希望美工能够完全独立的设计模板,而不需要程序
员的参与,追求更大的灵活性,却最终把模板的解析变
得越来越复杂了,使美工设计模板的工作远远大于只做
html设计的工作。很明显,这是得不偿失的。MVC设计
可以用编译来描述呢?单从模板来说,减少对模板中标
签的解析,甚至去掉所有解析,代码的运行效率就会提
高。所以,我们可以把模板中需要解析成PHP代码的地
方,直接转换成PHP代码,这就是编译,把模板翻译成
最终的PHP执行代码。
模式的Struts,其功能很强大,但是我接触了之后,觉
得要使模板完全脱离程序,特别是复杂一点的程序,还
是比较困难。而且,Struts的使用方法,体现设计者的
思路,在没有程序员参与的模板设计里面,模板就只能
够是一些纯的html代码,因为只有美工知道了程序员的
思路后,才知道里面的Struts标签应该如何使用。
实现这一转换很简单,就是把需要解析的地方,用
对应的PHP替换掉,然后把替换后的模板保存为PHP文
件。
界面设计和程序设计相分离,所以我把模板引擎分
为两个部分:一个是html模板部分,以.htm为后缀;一
个是程序部分,以.import为后缀。模板中设计了6种标
签,3种模块表示法和一种变量一种常量表示。
从上面的分析可以看出,过多的追求模板中使用
的标签的多样、功能强大,并没有很明显的减轻开发和
设计的工作量,更没有提高程序的运行效率。我个人认
为,简单易用、够用,使程序运行效率高才是模板设计
的关键。
标签以{开始,以/ 结束。
{T IMPORT SRC引人代码文件名字/}这个标签是
指示它所在的模版所要引用的.import程序文件。
二、一个PHP编译型模板引擎介绍
下面主要介绍我个人设计和实现的一个PHP编译
型模板引擎。它已经成功地用在了PHPArticle v2.1.1和
http://bbs.utspeed.tom这两个系统上。一个是内容管理系
{T CODE BLOCK代码模块名字/}这个标签代
表.import里定义的模块。
{T TEMPLATE模版名字/ 这个标签代表模版。
{T CHTML BLOCK混合模块名字
<!~BEGIN子模版名字一>
统(Content Manage System)和一个是BBS论坛系统。
38 信息系统工程1 2012 4.20
SYS PRACTICE 系统实践
≥
子模版html代码
<!一END子模版名字一>
{T_HTML_BLOCK person_info/)
<!—_I D show_info一
/}这个是混合模板,里面的子模板定义,可以无限
嵌套。
{T_HTML_CODE子模版名字/)这个代表混合模板
里面定义的子模板,作为PHP中的字符串来使用。
{T_HTML—BLOCK子模版名字/}这个同上,只是
上面的内容编译后生成test.php,内容如下:
<title>编译型模板</title>
<?
¥teacher=“李四”;
在使用的时候是作为html代码直接现实。
下面举例说明其使用方法。
模板文件分别为test.htm、header.htm、footer.htm。
代码文件为test
_
src.import(文件名’
一
’前面的test
对应test.htm中的test,说明这两个文件是相关联的)。
1)test.htm的内容
fT IMPORT SRC test/}
fT TEMPLATE header/}
{T_CHTML_BLOCK show—info
<!一BEGIN personinfo一
_
<b×?_\¥data[n锄e]?><,b>
学号:<b>
<?=
<!一BEGINperson
no一
_
学号:<b>\¥data[num]</b>
<!一ENDperson
no一
_
?>
<b>
老师:<?_\¥teacher?>
<!一END personinfo一
_
/)
EMPLATE footer/}
2)header.htm的内容
<title>编译型模板</title>
3)footer.htm的内容
<b>www.phparticle.net版权所有</b>
4)test src.import的内容
<!一BEGIN show
info一
—
<?
¥teacher=“李四”;
¥data=Array(name=>’张三’,num=>’1 23’);
¥person
no=“{T
HTMLCODE person
no
——
——
¥data=Array(name=>’张三’,num=>’123’);
¥person
_
no=“学号:<b>¥data[num]</b>”;
?>
<b><?=¥data[name]?></b>
学号:<b>
<?=
¥person
no
_
?>
<b>
老师:<?=¥teacher?>
<b>www.phparticle.net版权所有<,b>
从上面可以看出,test.php就是一个完整的PHP程
序。里面的标签全部都被替换掉了,包括test.htm和test
src.import里面的。这样就可以完全的去除了对模板进行
解析的过程。从test src.import的内容我们可以看出来,
代码模块的定格式是前后添]JI1<!-BEGIN代码模块名
一
和<!一END代码模块名一,其中还引用了两个标
签{T
HTML
CODE person
_—_
no/}和{T
HTMLBLOCK
—_
person—info/},前者是I)APHP字符串的方式引用,后者
是在PHP代码外部引用,而且,person
info
.
模板在定义
的时候,用了嵌套,把person no子模板嵌套在它里面
了。而且前后添加了<?=和?>,上面的代码就是:
{T_CHTML_BLOCK show—info
<!一BEGINperson
info一
_
<b×?_\¥姒a【n锄e】?> >
学号:<b>
<?=
<!一BEGINperson
no一
_
学号:<b>\¥data[num]</b>
<!一ENDperson
_
no一
?>
<b>
老师:<?_\¥teacher?>
<!--END person
info一
_
/)
(下转34页)
信息系统工程I 2012.4.20 30
< .<: REGIONLNFO数字地方
及汕 丽
s (_ + )向右下方人射(16)
故
r=一
三、结论与讨论
可见光线的轨迹为正弦波形,其空间周期为
T:—2n s
in io(17)
—
c =击七志 7
其中,z2= uⅣ2(1一 )
代入
代^
,
得
得
:
盟:一 二_
一
从(17)式可看出,从不同方向入射的光线,其
即
窘+鑫
人射角不同,周期也不同。但是对于人射角非常小的
兀
光线,即io≈ ,sin f0 1时,具有近似相同的空间
,)
解出 =Asi解出 n(: _ +【+【p。)(9)
(9)式中的A和(Po需要根据初始条件来确定,也
即是入射光的方向和入射点来确定,在初始时刻 =0处
r=0,故 sin(po=0(10)
因
=
周期 =
仅
,它的轨迹按照正弦波形的轨迹传播。还
可看出,对于小角度的入射光线,在光纤内有自聚焦作
用。
实际的光学纤维的涂层并非完全的均匀介质,光学
.
0处,— l = —__coy 0=coti0(11)故
ar1
纤维的折射率沿径向的分布为 =no:(1一仅 , ),这
种折射率的不均匀分布造成了光线在其中传播是按照正
Act cos(p0=cosi0(12)
弦波形的轨迹传播而非折线。正弦波形轨迹更符合实际
光线的传导路径。在信号传输时,适当选择折射率的分
布形式,可以使不同入射角的光线有大致相等的光程,
从而大大减少群时延差,对于信号的传导非常有用。H
参考文献
【1]胡新珉.医学物理学第五版[M].北京:人们卫生出版
社.2001:246—247.
。
由(1 0)、(1 2)两式,解出9o=0或兀,
: (13)
当入射光向右上入射时,cosio>0,故cos(Po>0(Po=0;
:
(14)
0【
当人身恍向右下 寸时,∞s ,故c0s(p
如(p0 丁c;
:一 fl51
【2】潘志达.医学物理学【M】.北京:科学出版社,2009:212—213.
因此,入射光从O点入射时,光线的轨迹方程为
【3】李甲科.大学物理[M】.西安:西安交通大学出版社,2010.
[4】姚启均.光学教程p .北京:高等教育出版社,2008:166-169.
: s )向右上方人射,
(作者单位:贵阳医学院物理教研室)
(上接39页)
no
其中二级嵌套的person 子模板定义中前后添加
.
易用,而且可以直接用dreamweaver等常用的html所见
即所得编辑工具直接编辑,在实现分离的同时,也很好
<?=和?>,是由于其上级,也就是person info子模板是
在PHP代码外部调用的,否则,不需要加上<?=和?>。
person
no
子模板最后被转换为
<?=¥person
no?>,定义
时子模板的名字和最终的变量 ¥,_
person no他们的名字
.
地保证了运行效率。
参考文献
鞠
[1】陆昌辉,熊帅,刘瑞涛.PHP WEB开发快速入门及实例精选fM】.
北京:电子工业出版社。2008.
相同。多以嵌套依次内推。这里就简要的举例说明了模
板的设计与实现思路,模板引擎类的代码实现,可以参
[2】陈营辉.PHP网络编程从入门到精通[M】.北京:清华大学,2007.
[3】(美)西若威齐(美)迭里.搜索引擎优化高级编程一PHP版【M】.北
京:清华大学,2008.
看phpArticle v2.1.1种的文件template.inc.php。下载请访
问、^n^n)l phparticle.net。
(作者单位:广东邮电职业技术学院)
三、结束语
从上面的test.htm模板内容,我们可以看出其简单
34 信息系统工程l 2012.4.20
版权声明:本文标题:PHP编译型模板的设计与实现 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1714369102a677087.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论