PHP的面向对象的特性越来越完善使得,PHP能够更好的从代码结构上进行系统的封装。当一个系统,其中有大量的逻辑存在与流程控制之中,MVC的优势就开始渐渐体现。
MVC的模式要求对系统的总体结构在逻辑上分成三部分
- View(界面/视图):用户界面,网页模板
- Controller(控制/流程):系统业务流程
- Model(模型/逻辑):系统设计中的一些基础类和数据操作
拿一个简单的登陆流程当例子
最常见的登陆流程是这样的,我们假设我们的网站根目录下有一个叫做/user的文件夹来存放所有与用户操作相关的页面,其中有一个页面是/user/login.php。而我们的根目录上有文件/index.php作为网站的首页。当我们打开/index.php的时候进行判断,如果未登陆则跳转到/user/login.php进行登陆,如果成功则跳回/index.php,否则跳到/error.php。
流程图如下:

根据文字和流程图的描述,我们可以开始编码了。
/index.php
< ?php //... $userLib = new userLib(); if (!$userLib->chkLogin()) header('location: /user/login.php'); //... ?>
/user/login.php
< ?php //... if (isset($_POST['submit'])) { $userLib = new userLib(); $succ = $userLib->login($_POST['name'], $_POST['pass']); header('location: '.($succ?'/index.php':'/error.php')); } $tpl = new Template(); $tpl->show('user_login.tpl'); ?>
/error.php
< ?php $tpl = new Template(); $tpl->show('error.tpl'); ?>
关于Controller
就像上面三段程序就是系统中的controller,他们并不执行什么具体的操作也不输出,只是不断调用Model中的不同方法来处理逻辑。
关于Model
Model则是另一个重要的话题,那便是在PHP中如何更好的类封装。但是在这里我们看到的在/user/login.php中被使用的userLib类和Template类都是系统中的model,他们处理具体的数据操作,并返回值来用controller使用。
从PHP5开始,我们有了接口,从PHP5.3开始,虽然还没有Release,我们有了namespace,PHP真正面向对象的时代已经到来了。这时候我们已经没有必要再去讨论我们应该把userLib写成userLib.function.php还是userLib.class.php,我们要做的只是更好的封装和理解各model之间的从属逻辑结构。更好的设计model中的各个库来保障系统的运行效率和维护效率。
关于View
View的部分往往被看作是前段设计人员的工作,但是作为PHP的程序员也必须关注这一话题。
对于view和controller来说,所有的页面都是围绕着流程来产生的。而controller有时也担负着处理页面与页面之间相互传递的工作。我们要确定页面的元素,特别是表单元素,并通过表单元素来处理用户提交的数据,其次我们还要确定PHP传递给模板的变量,然后才能交付给设计人员。
最后
我们还经常用来一些常用的文件夹名和文件名来暗示程序的阅读者,特别是新的阅读者,该文件夹或文件的作用。这也是相当重要的。

Posts