PHP_MVC_留言本开发实例.doc_第1页
PHP_MVC_留言本开发实例.doc_第2页
PHP_MVC_留言本开发实例.doc_第3页
PHP_MVC_留言本开发实例.doc_第4页
PHP_MVC_留言本开发实例.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PHP MVC 留言本开发实例搜集整理 清秋晓寒 2013/3/8db=mysql_pconnect($host,$user,$pass); /连接数据库服务器 mysql_select_db($db,$this-db); /选择所需数据库 /特别注意$db和$this-db的区别 /前者是构造函数参数 /后者是类的数据成员 /! 执行SQL语句 /* * 执行SQL语句,获取一个查询源并存储在数据成员$query中 * param $sql 被执行的SQL语句字符串 * return void */ function fetch($sql) $this-query=mysql_unbuffered_query($sql,$this-db); / Perform query here /! 获取一条记录 /* * 以数组形式返回查询结果的一行记录,通过循环调用该函数可遍历全部记录 * return mixed */ function getRow () if ( $row=mysql_fetch_array($this-query,MYSQL_ASSOC) ) /MYSQL_ASSOC参数决定了数组键名用字段名表示 return $row; else return false; ?下面再来介绍一下Model类。 这个类也很简单,里面的函数一看就知道,是针对各种数据操作的,它通过DataAccess访问数据库。PHP代码:dao中 * Model通过调用$this-dao的fetch方法执行所需的SQL语句 */ function _construct(&$dao) $this-dao=$dao; function listNote() /获取全部留言 $this-dao-fetch(SELECT * FROM note); function postNote($name,$content) /插入一条新留言 $sql = INSERT INTO test.note (id, name, content, ndate, add) VALUES (NULL, $name, $content, NULL, NULL); /echo $sql; /对于较复杂的合成SQL语句, /调试时用echo输出一下看看是否正确是一种常用的调试技巧 $this-dao-fetch($sql); function deleteNote($id) /删除一条留言,$id是该条留言的id $sql = DELETE FROM test.note WHERE id=$id; /echo $sql; $this-dao-fetch($sql); function getNote() /获取以数组形式存储的一条留言 /View利用此方法从查询结果中读出数据并显示 if ( $note=$this-dao-getRow() ) return $note; else return false; ?看完这两个类之后你可能会发现这与以前我们写程序差不多,的确现在还闻不到MVC的味道,如果你不懂MVC,在这两个类的基础上你完全可以开始写你以前的程序了。例如要显示全部留言,只需要写入下代码:PHP代码:listNote();while ($note=$model-getNote() $output.=姓名:$notename 留言: $notecontent ;echo $output;?很亲切吧,呵呵。 有了这个“感情基础”你就不会对MVC望而生畏了,下面我们就要上今天的主菜了,那就是“Controller”闪亮登场! 先大体浏览一下主要结构,它包括一个Controller类以及派生出的三个子类(listController对应显示留言功能、postController对应发表留言功能以及deleteController对应删除留言功能)。PHP代码:model; */ function _construct (& $dao) $this-model=& new Model($dao); function getView() /获取View函数 /返回视图对象view /对应特定功能的Controller子类生成对应的View子类的对象 /通过该函数返回给外部调用者 return $this-view; /用于控制显示留言列表的子类class listController extends Controller /extends表示继承 function _construct (& $dao) parent:_construct($dao); /继承其父类的构造函数 /该行的含义可以简单理解为: /将其父类的构造函数代码复制过来 $this-view=& new listView($this-model); /创建相应的View子类的对象来完成显示 /把model对象传给View子类供其获取数据 /用于控制添加留言的子类class postController extends Controllerfunction _construct (& $dao, $post) parent:_construct($dao); $this-view=& new postView($this-model, $post); /$post的实参为$_POST数组 /表单中的留言项目存储在该系统数组中 /用于控制删除留言的子类class deleteController extends Controller function _construct (& $dao, $id) parent:_construct($dao); $this-view=& new deleteView($this-model, $id); ?大体浏览之后,你一定打算开始仔细研究它了吧,别急,为了心中有数,我们先从宏观着眼,先看看总入口index.php是如何调用Controller的:PHP代码:PHP MVC留言板_脚本学堂_添加新留言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代码: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.=姓名:$notename 留言: $notecontent 删除 ; class postView extends View /发表留言的子类 function _construct(&$model, $post) parent:_construct(&$model); $this-model-postNote($postname,$postcontent); $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的概念和实现更明白了一点。 我也是个初学者,这是个依葫芦画瓢之作,目的就是想了解一下MVC,如果你是高手,我很想得到你的点评,这样的划分和架构是否符合MVC的理念?还有哪些应该改进之处? 当然,大家都知道现在很多关于MVC的争论,这很正常,就像关于开发语言的争论一样,永无休止,学术上的争论有助于创新。作为我们学技术、用技术而言,一定要踏实深入学习,掌握了基本用法之后再去讨论,那才是更高层次的发展,在自己都搞不

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论