已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年统编版四年级上册语文第一单元综合测评卷(有答案)
- 2026 年传递敬老温情践行孝善之举课件
- 2025年人民医院康复科临床用血知识考核试题及答案
- 宝玉石琢磨工测试验证强化考核试卷含答案
- 虚拟现实产品设计师安全综合能力考核试卷含答案
- 数控磨工风险评估与管理评优考核试卷含答案
- 2025年礼县数学三年级第二学期期末质量检测试题含答案
- 活性炭生产工安全宣传强化考核试卷含答案
- 塑料编织工7S考核试卷含答案
- 过滤与分离机械装配调试工岗前技术实务考核试卷含答案
- 四川蜀道铁路投资集团有限责任公司2026年秋季校园招聘笔试备考题库及答案详解
- 《技术学科知识与教学能力》(高级中学)全套备考核心资料(含真题解析)
- 2026年秋季七年级生物上册苏教版教学计划
- 化工园区公共管廊钢结构工程竣工验收报告
- 河北省2026中考语文作文真题解读及范文
- 2026年养老机构管理人员综合能力测试题
- 数据中心运维管理SOP文件
- 《外婆的澎湖湾》课件2025-2026学年湘艺版三年级下册音乐
- 8D报告培训教材
- 《网络与新媒体营销》课件 第四章 新媒体营销思维
- 防范鼠疫应急预案(3篇)
评论
0/150
提交评论