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 | 返回顶部