首页 > 框架与模版有什么区别,例如PHP的zend framework 和smarty

框架与模版有什么区别,例如PHP的zend framework 和smarty

框架一般用于比较大的项目,而模版一般适用于比较小的项目,这样说对吗?那么除了这个原因,还有什么呢?


framework和template是不同的概念。

framework(这里指web framework)的概念可以参考wiki,请注意加粗的文字:

A web application framework is a software framework that is designed to support the development of dynamic websites, web applications and web services. The framework aims to alleviate the overhead associated with common activities performed in Web development. For example, many frameworks provide libraries for database access, templating frameworks and session management, and they often promote code reuse.

template的概念如下:

A Web template system describes the software and methodologies used to produce web pages and for deployment on websites and delivery over the Internet.Such systems process web templates, using a template engine.

下图很好的描述了template的工作:

Smarty官网Why use Smarty中也有描述:

Some might argue that Smarty does what PHP can do already: separate the presentation from business logic. The PHP programming language is great for code development but when mixed with HTML, the syntax of PHP statements can be a mess to manage. Smarty makes up for this by insulating PHP from the presentation with a much simpler tag-based syntax. The tags reveal application content, enforcing a clean separation from PHP code. No PHP knowledge is required to manage Smarty templates.

framework像是一个骨架,而template只是其中的一部分骨头。

参考链接:
Web template system http://en.wikipedia.org/wiki/Web_temp...
Web application framework http://en.wikipedia.org/wiki/Web_appl...
Why use Smarty? http://www.smarty.net/why_use


我来点简单的说法吧:

Smarty 是一个模板引擎,模板引擎的好处就是当后台业务逻辑改变时,页面模板可以不需要甚至很少跟着变动,同样当页面模板改变时,后台业务代码也未必需要跟着变动。

Zend Framework 是一个框架,框架一般包含模型、视图和控制。模型定义数据结构,控制用来将某个请求传递给相应的视图,而视图就是定义要展现的数据。当数据传输给模板引擎后,模板引擎将数据翻译成用户界面,就是这么回事。

举例:
张三是个框架,你问他什么他回答什么,但是他说的外星语,人类听不懂。模板引擎是个万能翻译,能把外星语翻译成不同的人类语言,虽然语言不一样,但表达的意思相同。

嗯,就是这样滴。


我在2007年到2012年做过好多次培训,内容是《PHP Web应用架构演化》,PPT在此:http://weibo.com/1779910713/yhXYRoqpZ

看完估计就明白模板和框架的区别了


框架就是让你更快,更方便地开发应用,现在主流的PHP框架都支持MVC模式的开发,
M即“模型Model”(可以理解为对数据库的操作),
V即“视图View”(用来输出前端数据),
C即“控制器Controller”(后端逻辑,后端操作),
这样可以把前端、后端、数据库逻辑分离开,方便开发

控制器把模型中的数据处理后输出到视图,比如
我要在前端页面输出一句话:“你好,xxx”
后面的xxx需要替换为数据库中的用户名,通过控制器读取数据库数据,保存用户名到变量$user_name中。
不同的模板引擎有不同的语法规则,比如我在模板中填写

<p>你好,{$user_name}</p>

通过模板引擎处理,就可以方便输出最终页面了。

一般的框架都会带有一个模板引擎,即V的部分。或者使用开源的模板引擎,smarty就是比较著名的一个

分割线

update at 2012-09-05 15:53:48

下面再给MVC举个例子吧,其实我也是新手就别叫我高手了……⊙﹏⊙b

比如,我们做一个最简单的留言系统,只有一个字段,就是留言的内容
要实现两个最简单的功能:
1.显示留言内容
2.提交留言

传统的开发方式,把所有的代码(sql、php、html)都写到了一起,项目比较大时就不容易维护

现在我们梳理下两个功能的逻辑
1.显示留言内容
逻辑:用户访问->php处理(C)->读取数据库(M)->显示留言内容页面(V)

2.提交留言
逻辑:用户提交->php处理(C)->写入数据库(M)->显示结果页面(留言是否成功)(V)

M就是直接对数据库进行操作的。比如可以把留言数据里的js代码过滤掉。

这个例子很简单,其实不要C也行,比如我们可以在C里判断一下访问IP是不是在黑名单里面,就不读取数据库了,直接显示出错页面。

最后比如我们把数据库读出的留言数据保存在变量$content里,把它输出到模板,根据不同模板引擎写下模板,比如<p>留言内容:{$content}</p>

开发正式的项目的时候你就会理解MVC的含义了,MVC只是一个概念,没有硬性的规定,也不要被MVC束缚。
还是重在实践,建议选个框架,自己动手开发些小项目。

国内的开源框架:

国外的开源框架:

【热门文章】
【热门文章】