m 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替我们保持结果。
接下来是视图——我去掉了HTML以节省空间,你可以查看这篇文章的完整代码。
<?php /** * Binds product data to HTML rendering */ class ProductView { /** * 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 */ function ProductView (&$model) { $this->model=& $model; }
//! A manipulator /** * Builds the top of an HTML page * @return void */ function header () {
}
//! A manipulator /** * Builds the bottom of an HTML page * @return void */ function footer () {
}
//! A manipulator /** * Displays a single product * @return void */ function productItem($id=1) { $this->model->listProduct($id); while ( $product=$this->model->getProduct() ) { // Bind data to HTML } }
//! A manipulator /** * Builds a product table * @return void */ function productTable($rownum=1) { $rowsperpage=''20''; $this->model->listProducts($rownum,$rowsperpage); while ( $product=$this->model->getProduct() ) { // Bind data to HTML } }
//! An accessor /** * Returns the rendered HTML * @return string */ function display () { return $this->output; } } ?>
最后是控制器,我们将把视图实现为一个子类。
<?php /** * Controls the application */ class ProductController extends Prod |