45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:如何实现MVC模式的PHP功能?

如何实现MVC模式的PHP功能?

2016-08-24 19:18:41 来源:www.45fan.com 【

如何实现MVC模式的PHP功能?

例子

这里是一个使用MVC模式的简单例子。

首先我们需要一个数据库访问类,它是一个普通类。

<?php
/**
*A simple class for querying MySQL
*/

classDataAccess{
/**
* Private
* $db stores a database resource
*/

var$db;
/**
* Private
* $query stores a query resource
*/

var$query;// Query resource

//! A constructor.
/**
* Constucts a new DataAccess object
* @param $host string hostname for dbserver
* @param $user string dbserver user
* @param $pass string dbserver user password
* @param $db string database name
*/

functionDataAccess($host,$user,$pass,$db){
$this->db=mysql_pconnect($host,$user,$pass);
mysql_select_db($db,$this->db);
}

//! An accessor
/**
* Fetches a query resources and stores it in a local member
* @param $sql string the database query to run
* @return void
*/

functionfetch($sql){
$this->query=mysql_unbuffered_query($sql,$this->db);// Perform query here
}

//! An accessor
/**
* Returns an associative array of a query row
* @return mixed
*/

functiongetRow(){
if($row=mysql_fetch_array($this->query,MYSQL_ASSOC))
return$row;
else
return
false;
}
}

?>

 

在它上边放上模型。

<?php
/**
*Fetches "products" from the database
*/

classProductModel{
/**
* Private
* $dao an instance of the DataAccess class
*/

var$dao;

//! A constructor.
/**
* Constucts a new ProductModel object
* @param $dbobject an instance of the DataAccess class
*/

functionProductModel(&$dao){
$this->dao=&$dao;
}

//! A manipulator
/**
* Tells the $dboject to store this query as a resource
* @param $start the row to start from
* @param $rows the number of rows to fetch
* @return void
*/

functionlistProducts($start=1,$rows=50){
$this->dao->fetch("SELECT * FROM products LIMIT ".$start.", ".$rows);
}

//! A manipulator
/**
* Tells the $dboject to store this query as a resource
* @param $id a primary key for a row
* @return void
*/

functionlistProduct($id){
$this->dao->fetch("SELECT * FROM products WHERE PRODUCTID='".$id."'");
}

//! A manipulator
/**
* Fetches a product as an associative array from the $dbobject
* @return mixed
*/

functiongetProduct(){
if($product=$this->dao->getRow())
return$product;
else
return
false;
}
}

?>

 

有一点要注意的是,在模型和数据访问类之间,它们的交互从不会多于一行——没有多行被传送,那样会很快使程式慢下来。同样的程式对于使用模式的类,它只需要在内存中保留一行(Row——其他的交给已保存的查询资源(query resource——换句话说,我们让MYSQL替我们保持结果。
 

接下来是视图——我去掉了HTML以节省空间,你可以查看这篇文章的完整代码。

<?php
/**
*Binds product data to HTML rendering
*/

classProductView{
/**
* Private
* $model an instance of the ProductModel class
*/

var$model;

/**
* Private
* $output rendered HTML is stored here for display
*/

var$output;

//! A constructor.
/**
* Constucts a new ProductView object
* @param $model an instance of the ProductModel class
*/

functionProductView(&$model){
$this->model=&$model;
}

//! A manipulator
/**
* Builds the top of an HTML page
* @return void
*/

functionheader(){

}

//! A manipulator
/**
* Builds the bottom of an HTML page
* @return void
*/

functionfooter(){

}

//! A manipulator
/**
* Displays a single product
* @return void
*/

functionproductItem($id=1){
$this->model->listProduct($id);
while($product=$this->model->getProduct()){
// Bind data to HTML
}
}

//! A manipulator
/**
* Builds a product table
* @return void
*/

functionproductTable($rownum=1){
$rowsperpage='20';
$this->model->listProducts($rownum,$rowsperpage<SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: #006600;


本文地址:http://www.45fan.com/a/question/67077.html
Tags: PHP 模式 MVC
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部