background image

PHP 框架 MVC 原理和模板 smarty 原理

PHP

模板引擎听起来比较高深,像一般用到 引擎 两字都会感觉比较高级,类似游戏 3D

引擎、Zend 引擎等,其实都是唬人的,骗外行人的。所以在我当初学 PHP 的那会,也因为

这 模板引擎 四个字导致了我觉得很难而没有去看他到底是什么样一个东西,直到很长
时间以后使用 Smarty 才真正了解模板引擎的原理和作用。Smarty,PHP 官方模板引擎,看
名字给人感觉应该很快,其实很慢,即使他有预编译(另一个看起来很高级的名词,同样
也是唬人的,下面我会讲到这个)。其实在 PHP 里,模板引擎扮演着 View(其实通俗说就是
页面,看英文有时候会给人很高级的错觉)的角色,这是一个很重要的角色,因为用户的
交互啊,界面效果啊等等都在这里,这是最终用户看到的你的系统的样子。
 

为了更好的说明模板引擎所扮演的角色,我也不得不 MVC 原理。这个话题恐怕互联网上
谈及的很多,我也只能根据我的理解来描述,可能有不恰当的地方,欢迎讨论。通常的
MVC 是指 Model、View 和 Controller。也就是模型、视图和控制器。我理解 MVC 也是在学了
PHP 不短时间后了,当时请教老廖,才恍然大悟。

先来说说 Controller,也就是控制器,控制器是个什么东西呢?在 PHP 里他是扮演一个接
收用户请求,把用户请求定位到指定数据模型的角色。解释起来感觉不是很好解释,来看
一个简单的留言本的例子:
PHP 代码
//

 

用户请求可能是 http://www.086php.com/guest.php?module=list

$module = $_GET['module'];
switch ($module) {
case ‘list’:
require_once ‘list.php’;
break;
case ‘add’:
require_once ‘add.php’;
break;
case ‘del’:
require_once ‘del.php’;
break;
default:
require_once ‘list.php’;
break;
}

是不是看起来很简单好像没什么东西呀,只是根据用户的请求参数包含不同的文件而已。
没错,确实很容易,这个 switch 语句其实就一个最简单的控制器的实现。他控制什么?他
控制你根据不同的用户请求参数调用不同的数据模型处理用户请求。那么这里的 list 可能
是一个留言列表,add 是添加留言,del 是删除留言。Controller 的传统实现可以这么简单,
当然现在的很多技巧包括根据不同的用户请求包含不同的业务逻辑处理类,比如 list 自动
定位到/model/List.class.php 这样的一些技巧性操作等。