已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
小程序一共包含6个文件,其中index.php是程序入口、post.htm是留言表单、在lib文件夹里Model、View 、Controller三个文件分别实现MVC,DataAccess是一个简单的数据库访问类。复制PHP内容到剪贴板 PHP代码:db=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内容到剪贴板 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内容到剪贴板 PHP代码:listNote();while ($note=$model-getNote() $output.=姓名:$notename 留言: $notecontent ;echo $output;?很亲切吧,呵呵。 有了这个“感情基础”你就不会对MVC望而生畏了,下面我们就要上今天的主菜了,那就是“Controller”闪亮登场! 先大体浏览一下主要结构,它包括一个Controller类以及派生出的三个子类(listController对应显示留言功能、postController对应发表留言功能以及deleteController对应删除留言功能)。复制PHP内容到剪贴板 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代码: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内容到剪贴板 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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026水利部黄河水利委员会事业单位招聘高校毕业生265人考试笔试备考题库及答案解析
- 《公文写作与处理》、《应用文写作》期末复习资料130614答案版11
- 2025江苏南通通州区十总镇残疾人之家招聘一般公益性岗位2人考试笔试模拟试题及答案解析
- 2025四川绵阳长虹美菱股份有限公司招聘操作工等岗位拟录用人员笔试历年参考题库附带答案详解
- 遂川县城控人力资源管理有限公司2025年公开招聘工作人员部分岗位要求调整及延期笔试考试参考试题及答案解析
- 2026年陕西省选调生招录(面向武汉大学)笔试考试参考题库及答案解析
- 2025广东中山市人民政府南区街道办事处招聘编外聘用人员6人考试笔试备考试题及答案解析
- 2025湖南省社会科学院湖南省人民政府发展研究中心第二批高层次人才招聘3人考试笔试模拟试题及答案解析
- 2025四川南充市自然资源和规划局遴选公务员2人笔试考试备考题库及答案解析
- 2026年赣南医科大学第一附属医院(第一临床医学院)引培生招录6人考试笔试参考题库附答案解析
- 城区雨污水泵站及管网工程运营管理方案
- 第11课 古代战争与地域文化的演变 课件-【知识提要】高二下学期历史统编版(2019)选择性必修3
- 烟酒领用审批单
- 资源与运营管理-第二次形考任务-国开-参考资料
- 银行企业融资渠道试题及答案
- 河北定向选调笔试真题2024
- 北京市海淀市2024-2025学年七年级上学期期末历史试题(含答案)
- 2024-2025学年第一学期期末考试七年级道德与法治试卷
- 中国政法大学《傅里叶分析与小波分析》2023-2024学年第一学期期末试卷
- 电子版个人简历模板下载8篇
- 2.2 二次函数的图象与性质(2)北师大版数学九年级下册课件
评论
0/150
提交评论