PHP MVC留言本实例Word格式.docx
- 文档编号:17666511
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:12
- 大小:21.14KB
PHP MVC留言本实例Word格式.docx
《PHP MVC留言本实例Word格式.docx》由会员分享,可在线阅读,更多相关《PHP MVC留言本实例Word格式.docx(12页珍藏版)》请在冰豆网上搜索。
//用于存储数据库连接
var$query_id;
//用于存储查询源
//!
构造函数.
/**
*创建一个新的DataAccess对象
*@param$host数据库服务器名称
*@param$user数据库服务器用户名
*@param$pass密码
*@param$db数据库名称
function__construct($host,$user,$pass,$db){
$this->
link_id=mysql_pconnect($host,$user,$pass);
//连接数据库服务器
mysql_select_db($db,$this->
link_id);
//选择所需数据库
mysql_query("
setnamesutf8;
"
);
}
执行SQL语句
*执行SQL语句,获取一个查询源并存储在数据成员$query中
*@param$sql被执行的SQL语句字符串
*@returnvoid
functionquery($sql){
query_id=mysql_unbuffered_query($sql,$this->
//Performqueryhere
if($this->
query_id)returntrue;
elsereturnfalse;
获取结果集
*以数组形式返回查询结果的所有记录
*@returnmixed
functionfetchRows($sql){
query($sql);
$arr=array();
$i=0;
while($row=mysql_fetch_array($this->
query_id,MYSQL_ASSOC))
//MYSQL_ASSOC参数决定了数组键名用字段名表示
{$arr[$i]=$row;
$i++;
return$arr;
}
>
复制代码
下面再来介绍一下Model类。
这个类也很简单,里面的函数一看就知道,是针对各种数据操作的,它通过DataAccess访问数据库。
Model类
*它的主要部分是对应于留言本各种数据操作的函数
*如:
留言数据的显示、插入、删除等
classModel{
var$dao;
//DataAccess类的一个实例(对象)
构造函数
*构造一个新的Model对象
*@param$dao是一个DataAccess对象
*该参数以地址传递(&
$dao)的形式传给Model
*并保存在Model的成员变量$this->
dao中
*Model通过调用$this->
dao的fetch方法执行所需的SQL语句
function__construct(&
$dao){
dao=$dao;
functionlistNote(){//获取全部留言
$notes=$this->
dao->
fetchRows("
SELECT*FROMnoteORDERBYtimedateDESC"
return$notes;
functionpostNote(){//插入一条新留言
$name=$_POST['
username'
];
$email=$_POST['
email'
$content=$_POST['
content'
$timedate=time()+8*3600;
$sql="
INSERTINTOnote(name,email,content,timedate)VALUES
('
.$name."
'
'
.$email."
.$content."
.$timedate."
)"
;
//echo$sql;
//对于较复杂的合成SQL语句,<
br/>
//调试时用echo输出一下看看是否正确是一种常用的调试技巧
query($sql))returntrue;
functiondeleteNote(){//删除一条留言,$id是该条留言的id
DELETEFROMnoteWHEREid="
.$_GET['
id'
看完这两个类之后你可能会发现这与以前我们写程序差不多,的确现在还闻不到MVC的味道,如果你不懂MVC,在这两个类的基础上你完全可以开始写你以前的程序了。
例如要显示全部留言,只需要写入下代码:
require_once('
lib/DataAccess.php'
lib/Model.php'
$dao=&
newDataAccess('
localhost'
'
root'
password'
test'
$model=&
newModel($dao);
$notes=$model->
listNote();
……
很亲切吧,呵呵。
有了这个“感情基础”你就不会对MVC望而生畏了,下面我们就要上今天的主菜了,那就是“Controller”闪亮登场!
先大体浏览一下主要结构,它包括一个Controller类以及派生出的三个子类(listController对应显示留言功能、postController对应发表留言功能以及deleteController对应删除留言功能)。
Controller
*控制器将$_GET['
action'
]中不同的参数(list、post、delete)
*对应于完成该功能控制的相应子类
classController{
var$model;
//Model对象
var$view;
//View对象
*构造一个Model对象存储于成员变量$this->
model;
function__construct(&
$dao){
model=&
functiongetView(){//获取View函数
//返回视图对象view
//对应特定功能的Controller子类生成对应的View子类的对象
//通过该函数返回给外部调用者
return$this->
view;
//用于控制显示留言列表的子类
classlistControllerextendsController{//extends表示继承
parent:
:
__construct($dao);
//继承其父类的构造函数
//该行的含义可以简单理解为:
//将其父类的构造函数代码复制过来
model->
view=&
newlistView($notes);
//创建相应的View子类的对象来完成显示
//用于控制添加留言的子类
classpostControllerextendsController{
postNote())$success=1;
else$success=0;
newpostView($success);
//用于控制删除留言的子类
classdeleteControllerextendsController{
deleteNote())$success=1;
newdeleteView($success);
大体浏览之后,你一定打算开始仔细研究它了吧,别急,为了心中有数,我们先从宏观着眼,先看看总入口index.php是如何调用Controller的:
html>
head>
metahttp-equiv="
Content-Type"
content="
text/html;
charset=utf-8"
/>
title>
PHPMVC留言板<
/title>
/head>
bodyleftmargin="
50px"
ahref="
notebook.htm"
添加新留言<
/a>
br>
p>
//!
index.php总入口
*index.php的调用形式为:
*显示所有留言:
index.php?
action=list
*添加留言:
action=post
*删除留言:
action=delete&
id=x
lib/View.php'
lib/Controller.php'
//创建DataAccess对象(请根据你的需要修改参数值)
yourpasswordhere'
notebook'
//根据$_GET["
action"
]取值的不同调用不同的控制器子类
$action=$_GET["
switch($action)
{
case"
post"
$controller=&
newpostController($dao);
break;
list"
newlistController($dao);
delete"
newdeleteController($dao);
default:
//默认为显示留言
$view=$controller->
getView();
//获取视图对象
$view->
display();
//输出HTML
/body>
/html>
看过index.php之后你就更清楚了吧,原来功能是通过$_GET[“action”]指定的,由一个switch结构分发,不同的功能对应不同的Controller子类。
现在可以滚上去(滚动页面上去的简称,绝非不洁用语^_^)仔细看看这个Controller代码了。
注释应该很细了,不懂的地方就去看看PHP5的OOP语法和概念吧,单纯看这些概念总是越看催眠效果越好,现在带着实际问题去看,应该有所不同吧。
不过我还是建议你在完成这个MVC的HelloWorld知道MVC是怎么回事之后下功夫打好OOP的基础,毕竟那是根本啊。
怎么样,Controller真是个光说不练的家伙吧,看不到三行它就把你引向View了,那就看看View吧。
View里有对应的子类,负责相应功能的显示。
理解了Controller,View的代码就不难看了,难看的话也是因为混杂着HTML的原因,它所做的就是把Controller(Controller是个二道贩子,它的数据来自Model)给它的数据,然后塞到HTML中。
View类
*针对各个功能(list、post、delete)的各种View子类
*被Controller调用,完成不同功能的网页显示
classView{
var$output;
//用于保存输出HTML代码的字符串
functiondisplay(){//输出最终格式化的HTML数据
echo($this->
output);
classlistViewextendsView//显示所有留言的子类
function__construct($notes)
{
foreach($notesas$value)
output.="
strong>
访客姓名:
/strong>
.$value['
name'
]."
/p>
.
"
访客邮箱:
访客留言:
来访时间:
.date("
y-m-dH:
i"
$value['
timedate'
])."
palign=\"
right\"
ahref=\"
id="
\"
删除留言<
hr/>
classpostViewextendsView//发表留言的子类
function__construct($success)
if($success)
output="
留言成功!
.$_SERVER['
PHP_SELF'
action=list\"
查看<
else
留言保存失败!
classdeleteViewextendsView//删除留言的子类
留言删除成功!
之所以UI方面写得如此简陋,是因为这些工作可以交给Smarty这样的模板去做,而我们这里就像集中精力研究MVC,不想把Smarty扯进来,所以就这样凑合了,以后我们可以再把Smarty结合进来。
看了这个东西之后不知你是否对MVC的概念和实现更明白了一点。
我也是个初学者,这是个依葫芦画瓢之作,目的就是想了解一下MVC,如果你是高手,我很想得到你的点评,这样的划分和架构是否符合MVC的理念?
还有哪些应该改进之处?
当然,大家都知道现在很多关于MVC的争论,这很正常,就像关于开发语言的争论一样,永无休止,学术上的争论有助于创新。
作为我们学技术、用技术而言,一定要踏实深入学习,掌握了基本用法之后再去讨论,那才是更高层次的发展,在自己都搞不清的情况下在哪里争论只能是浪费时间。
下面说说我体会到的MVC的好处,它的确给程序的功能扩展带来方便,比如这个例子我们想要增加一个根据用户名查询留言的功能,只需要在Model里增加一个查询函数(突然发现这些函数的用法很像存储过程),Controller和View里增加相应的子类,这种分离带来的好处是程序功能模块可以即插即用,再就是整个程序的逻辑非常清晰。
我想,对于需求变动频繁的Web应用来说,这种特性也许是很有价值的。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PHP MVC留言本实例 MVC 留言 实例