PHP的MVC实现(2)

控制器实际上是用来触发模型的数据和视图元素之间的绑定的控件。

  例子

  这里是一个使用MVC模式的简单例子。
首先我们需要一个数据库访问类,它是一个普通类。

以下是代码片段:
<?php  
/**  
* A simple class for querying MySQL  
*/  
class DataAccess {  
/**  
* 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  
*/  
function DataAccess ($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  
*/  
function fetch($sql) {  
$this->query=mysql_unbuffered_query($sql,$this->db); // Perform query here  
}  
//! An accessor  
/**  
* Returns an associative array of a query row  
* @return mixed  
*/  
function getRow () {  
if ( 
$row=mysql_fetch_array($this->query,MYSQL_ASSOC) )  
return 
$row;  
else  
return 
false;  
}  
}  
?> 

  在它上边放上模型。

以下是代码片段:
<?php  
/**  
* Fetches "products" from the database  
*/  
class ProductModel {  
/**  
* 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  
*/  
function ProductModel (&$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  
*/  
function listProducts($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  
*/  
function listProduct($id) {  
$this->dao->fetch("SELECT * FROM products WHERE PRODUCTID=’".$id."’");  
}  
//! A manipulator  
/**  
* Fetches a product as an associative array from the $dbobject  
* @return mixed  
*/  
function getProduct() {  
if ( 
$product=$this->dao->getRow() )  
return 
$product;  
else  
return 
false;  
}  
}  
?> 

  有一点要注意的是,在模型和数据访问类之间,它们的交互从不会多于一行??没有多行被传送,那样会很快使程式慢下来。同样的程式对于使用模式的类,它只需要在内存中保留一行(Row)??其他的交给已保存的查询资源(query resource)??换句话说,我们让MYSQL替我们保持结果。
posted @ 2008-08-23 09:24  酷越  阅读(531)  评论(0编辑  收藏  举报