深入解析php模板技术原理【一】

前端之家收集整理的这篇文章主要介绍了深入解析php模板技术原理【一】前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1、模板的由来 @H_502_0@在没有模板技术之前,使用PHP开发程序,通常都是PHP代码和html混编在一起。比如说新闻列表,很可能就是一个newslist.PHP页面,结构如下: <? @H_502_0@//从数据库中读取出要显示的新闻记录 @H_5020@?> @H5020@ @H5020@…….. @H5020@ @H5020@ @H5020@<? @H502_0@While($news=MysqL_fetcharray($result)){ @H5020@?> @H5020@ @H5020@<? @H5020@} @H5020@?> @H5020@ @H502_0@ 那么这样有什么问题呢?首先,不利于分工合作。一般来说,都会由程序员来写代码,美工人员设计页面。那么在这种方式中,程序员必须等待美工人员把界面设计好才能开始工作。也就是说程序员和美工的工作是不能同步的。其次、不利于维护,可维护性差。比如说程序固定后,要修改界面,那么必须由美工修改后,程序员再重新添加。最后,程序结构混乱,可读性差。HTML和PHP混编在一起,一旦程序一多,就会变的非常的凌乱。 理解模板原理——使用PHP标签的模板技术 @H_502_0@模板技术正是为了解决这些问题而出现的,为了解决这些问题,最早出现的是使用PHP标签的模板技术。 @H_502_0@首先,我们要明白模板的目的是什么。模板主要要实现几个任务呢?第一、美工和程序的分离。更确切的说法是获取数据和显示数据的分离。第二、分工。良好的分工合作。 @H_5020@比如说新闻列表,如果使用模板,我们就可以把新闻列表的操作分成两部分: @H502_0@1、getnews.PHP负责从数据库中读取数据到数组$news中,不关心$news是如何显示的。 @H_502_0@2、Shownews.PHP负责把$news数组输出成HTML页面。而它不需要理会$news是从哪里来的。 @H_502_0@好,这样,我们就实现了美工和程序的分离,达到了我们的初步目的,但是如何把这两个页面联合起来,并实现listnews.PHP功能呢? @H_502_0@这就需要另外一个页面listnews.PHP,来负责把“美工(显示数据)”和“程序员(获取数据)”连接起来。应该说这个页面就是很简单了。 @H_502_0@假设getnews.PHP代码如下: @H_5020@<? @H502_0@$news=“新闻列表”;//实际中应该是从数据库中读取出来的。 @H_502_0@?> Shownesw.PHP代码如下: @H_5020@ @H5020@ @H502_0@<a href="/tag/xianshi/" target="_blank" class="keywords">显示</a>新闻 @H_5020@ @H5020@ @H5020@<?=$news?> @H5020@ @H502_0@ 那么,这个联合页面listnews.PHP代码就很简单了 @H_5020@<? @H502_0@Include(‘getnews.PHP');//获取数据 @H_502_0@Include(‘shownesw.PHP');//显示数据 @H_5020@?> 总结 @H502_0@使用PHP标签的模板系统,能够很好的实现美工和程序的分离,同时方便程序员和美工人员的分工合作,比如在上面的例子中shownews.PHP由美工人员来维护,getnews.PHP由程序人员来维护。而listnews.PHP就可以由系统设计人员来维护了。当然这中间需要增加一些约定的文档。 @H_502_0@事实上,这个简单的例子也说明了最基本的MVC模型。其中M,模型,也就是负责读取数据,相当于我们的getnews.PHP。V,就是试图,用来显示数据,也就对应了shownews.PHP。最后是控制器C,对应我们的listnews.PHP 学习解释性模板技术——PHPLIB @H_502_0@PHPlib的模板系统以小巧灵活、方便简单的特点赢得了很多PHPer的喜欢,在模板技术中占有一定的地位,它和fasttemplate之类的模板引擎都属于解释性模板技术。 @H_502_0@在具体讲解PHPlib的使用之前,先说明为什么使用PHP标签的模板系统要继续改进。其实,这主要还是因为PHP标签对美工人员来说不方便。他们更加喜欢直接使用这种可视化的标签,比如{title}。 @H_502_0@首先,我们自己把之前我们那个例子修改成使用可视化的标签来处理。第一步,把shownews.PHP改成shownews.tpl,里面的PHP标签换成可视化的标签,shownews.tpl的代码如下: @H_5020@ @H5020@ @H502_0@<a href="/tag/xianshi/" target="_blank" class="keywords">显示</a>新闻 @H_5020@ @H5020@ @H5020@{title} @H5020@ @H5020@ @H502_0@第二步,如何实现listnews.PHP效果呢?其实很简单,我只要直接把{title}替换成不就可以了吗?所以,修改后的listnews.PHP代码如下: @H_5020@<? @H502_0@Include('getnews.PHP');//获取数据 @H_502_0@echostr_replace('{title}',$news,file_getcontents('shownews.tpl')) @H502_0@?> 其实PHPlib的原理正是这样!比如说我们要使用PHPlib来实现上面功能,我们只需要修改listnews.PHP.修改代码如下: @H_5020@<? @H502_0@Include('getnews.PHP');//获取数据 @H_502_0@include('template.class.PHP'); @H_5020@$t=newTemplate(); @H502_0@$t->setfile(‘shownesw,'shownews.tpl'); @H502_0@$t->setvar('news',$news); @H5020@$t->parse('out',‘shownesw'); @H5020@$t->p('out'); @H5020@?> @H502_0@另外关于PHPlib的区域,大家可以去查阅相应的手册。 编译型的samrty,下次继续讲

猜你在找的PHP相关文章