php //!index.php 总入口 /** * index.php的 调用形式为: * 显示所有留言:index.php?action=list * 添加留 言 :index.php?action=post * 删除留言 :index.php?action=delete& id=x */ require_once('lib/DataAccess.php'); require_once('lib/Model.php'); require_once('lib/View.php'); require_once('lib/Controller.php'); //创建DataAccess对象(请根据你的需要修改参数值) $dao=& new DataAccess ('localhost','root','','test'); //根据$_GET["action"]取值的不同调用不同的控制器子类 $action=$_GET["action"]; switch ( $action) { case "post": $controller=& new postController($dao,$_POST); break; case "list": $controller=& new listController($dao); break; case "delete": $controller=& new deleteController($dao,$_GET["id"]); break; default: $controller=& new listController($dao); break; //默认为显示留言 } $view=$controller->getView(); //获取视图对象 $view->display(); //输出HTML ?>
看过index.php之后你就更清楚了吧,原来功能是通过$_GET[“action”]指定的,由一个switch结构分发,不同的功能对应不 同的Controller子类。现在可以滚上去(滚动页面上去的简称,绝非不洁用语^_^)仔细看看这个Controller代码了。注释应该很细了,不 懂的地方就去看看PHP5的OOP语法和概念吧,单纯看这些概念总是越看催眠效果越好,现在带着实际问题去看,应该有所不同吧。不过我还是建议你在完成这 个MVC的Hello World知道MVC是怎么回事之后下功夫打好OOP的基础,毕竟那是根本啊。
怎么样,Controller真是个光说 不练的家伙吧,看不到三行它就把你引向View了,那就看看View吧。
View里有对应的子类,负责相应功能的显示。理解了 Controller,View的代码就不难看了,难看的话也是因为混杂着HTML的原因,它所做的就是从Model获取所需的数据,然后塞到HTML 中。
PHP代码:
//! View 类 /** * 针对各个功能(list、post、delete)的各种 View子类 * 被Controller调用,完成不同功能的网页显示 */ class View { var $model; //Model对象 var $output; //用于保存输出HTML代码 的字符串 //! 构造函数 /** * 将参数中的Model对象接收并存储在成员变量$this->model中 * 供子类通 过model对象获取数据 */ function __construct (&$model) { $this->model=$model; } function display() { //输出最终格式化的HTML数据 echo($this->output); } } class listView extends View //显示所有留言 的子类 { function __construct(&$model) { parent::__construct(&$model); //继承父类的构造函数(详见Controller) $this->model->listNote(); while ($note=$this->model->getNote()) //逐行获取数据 { $this->output.="姓名:$note[name] 留 言: $note[content] 删除 "; } } } class postView extends View //发表留言的子类 { function __construct(&$model, $post) { parent::__construct(&$model); $this->model->postNote($post[name],$post[content]); $this->output="Note Post OK! 查看"; } } class deleteView extends View //删除留言的子类 { function __construct(&$model, $id) { parent::__construct(&$model); $this->model->deleteNote($id); $this->output="Note Delete OK! 查看"; } } ?>
之所以UI方面写得如此简陋,是因为这些工作可以交给Smarty这样的模板去做,而我们这里就像集中精力研究MVC,不想把Smarty扯进来, 所以就这样凑合了,以后我们可以再把Smarty结合进来。
看了这个东西之后不知你是否对MVC的概念和实现更明白了一点。