MVC模式在网站WebSite架构中十分常见
![](/icons/63472dou2.gif)
![](/icons/63472yi.gif)
![](/icons/63472de.gif)
![](/icons/63472dou.gif)
![](/icons/63472de.gif)
![](/icons/63472dou.gif)
![](/icons/63472de.gif)
![](/icons/63472dou2.gif)
视图(View)
“视图”主要指我们送到Web浏览器
![](/icons/63472de.gif)
![](/icons/63472de.gif)
![](/icons/63472de.gif)
![](/icons/63472dou2.gif)
![](/icons/63472dou.gif)
![](/icons/63472de.gif)
![](/icons/63472dou.gif)
![](/icons/63472de.gif)
![](/icons/63472de.gif)
![](/icons/63472dou2.gif)
对视图来说
![](/icons/63472dou.gif)
![](/icons/63472de.gif)
![](/icons/63472de.gif)
![](/icons/63472dou.gif)
![](/icons/63472dou.gif)
![](/icons/63472de.gif)
![](/icons/63472de.gif)
![](/icons/63472dou2.gif)
以XML为例
![](/icons/63472dou.gif)
![](/icons/63472dou.gif)
![](/icons/63472de.gif)
![](/icons/63472yi.gif)
![](/icons/63472de.gif)
![](/icons/63472dou2.gif)
![](/icons/63472yi.gif)
![](/icons/63472de.gif)
![](/icons/63472dou2.gif)
绝大多数模板方案使用简单
![](/icons/63472de.gif)
![](/icons/63472de.gif)
<p>{some_text}</p>
<p>{some_more_text}</p>
它们在文档中没有意义
![](/icons/63472dou.gif)
![](/icons/63472de.gif)
![](/icons/63472de.gif)
![](/icons/63472dou2.gif)
如果你同意这种对视图
![](/icons/63472de.gif)
![](/icons/63472dou.gif)
![](/icons/63472de.gif)
![](/icons/63472dou2.gif)
![](/icons/63472dou2.gif)
在你实现视图时问自己几个问题:“全体视图
![](/icons/63472de.gif)
![](/icons/63472yi.gif)
![](/icons/63472de.gif)
![](/icons/63472de.gif)
![](/icons/63472yi.gif)
模型(Model)
模型代表了
![](/icons/63472chengxu.gif)
![](/icons/63472dou2.gif)
![](/icons/63472chengxu.gif)
总
![](/icons/63472de.gif)
![](/icons/63472dou.gif)
![](/icons/63472de.gif)
![](/icons/63472de.gif)
![](/icons/63472dou.gif)
![](/icons/63472dou2.gif)
![](/icons/63472dou.gif)
![](/icons/63472dou.gif)
![](/icons/63472yi.gif)
![](/icons/63472dou2.gif)
![](/icons/63472dou.gif)
![](/icons/63472de.gif)
![](/icons/63472dou.gif)
![](/icons/63472de.gif)
![](/icons/63472dou.gif)
![](/icons/63472dou.gif)
![](/icons/63472dou2.gif)
控制器(controller)
简单
![](/icons/63472de.gif)
![](/icons/63472de.gif)
![](/icons/63472diaoyong.gif)
![](/icons/63472de.gif)
![](/icons/63472yi.gif)
![](/icons/63472dou2.gif)
![](/icons/63472de.gif)
![](/icons/63472dou.gif)
![](/icons/63472yi.gif)
![](/icons/63472dou.gif)
![](/icons/63472de.gif)
![](/icons/63472dou2.gif)
![](/icons/63472de.gif)
![](/icons/63472yi.gif)
![](/icons/63472dou.gif)
![](/icons/63472de.gif)
![](/icons/63472dou2.gif)
![](/icons/63472de.gif)
![](/icons/63472de.gif)
<?php
switch ($_GET['viewpage']) {
![](/icons/63472case.gif)
![](/icons/63472new.gif)
$page=
![](/icons/63472new.gif)
![](/icons/63472break.gif)
![](/icons/63472case.gif)
$page=
![](/icons/63472new.gif)
![](/icons/63472break.gif)
default:
$page=
![](/icons/63472new.gif)
![](/icons/63472break.gif)
}
$page->display
![](/icons/63472kh.gif)
?>
这段代码混用了面向过程和对象
![](/icons/63472de.gif)
![](/icons/63472dou.gif)
![](/icons/63472de.gif)
![](/icons/63472dou.gif)
![](/icons/63472de.gif)
![](/icons/63472dou2.gif)
![](/icons/63472de.gif)
![](/icons/63472dou2.gif)
控制器实际上是用来触发模型
![](/icons/63472de.gif)
![](/icons/63472de.gif)
![](/icons/63472de.gif)
![](/icons/63472dou2.gif)
例子
这里是
![](/icons/63472yi.gif)
![](/icons/63472de.gif)
![](/icons/63472dou2.gif)
首先我们需要
![](/icons/63472yi.gif)
![](/icons/63472dou.gif)
![](/icons/63472yi.gif)
![](/icons/63472dou2.gif)
<?php
/**
* A simple
![](/icons/63472class.gif)
*/
![](/icons/63472class.gif)
/**
* Private
* $db stores a database resource
*/
var $db;
/**
* Private
* $query stores a query resource
*/
var $query; // Query resource
//! A constructor.
/**
* Constucts a
![](/icons/63472new.gif)
* @param $host
![](/icons/63472string.gif)
* @param $user
![](/icons/63472string.gif)
* @param $pass
![](/icons/63472string.gif)
* @param $db
![](/icons/63472string.gif)
*/
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
![](/icons/63472string.gif)
* @
![](/icons/63472return.gif)
*/
function fetch($sql) {
$this->query=mysql_unbuffered_query($sql,$this->db); // Perform query here
}
//! An accessor
/**
* Returns an associative
* @
![](/icons/63472return.gif)
*/
function getRow
![](/icons/63472kh.gif)
![](/icons/63472if.gif)
![](/icons/63472return.gif)
![](/icons/63472else.gif)
![](/icons/63472return.gif)
}
}
?>
在它上边放上模型
![](/icons/63472dou2.gif)
<?php
/**
* Fetches "products" from the database
*/
![](/icons/63472class.gif)
/**
* Private
* $dao an instance of the DataAccess
![](/icons/63472class.gif)
*/
var $dao;
//! A constructor.
/**
* Constucts a
![](/icons/63472new.gif)
* @param $dbobject an instance of the DataAccess
![](/icons/63472class.gif)
*/
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
* @
![](/icons/63472return.gif)
*/
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
* @
![](/icons/63472return.gif)
*/
function listProduct($id) {
$this->dao->fetch("SELECT * FROM products WHERE PRODUCTID='".$id."'");
}
//! A manipulator
/**
* Fetches a product as an associative
* @
![](/icons/63472return.gif)
*/
function getProduct
![](/icons/63472kh.gif)
![](/icons/63472if.gif)
![](/icons/63472kh.gif)
![](/icons/63472return.gif)
![](/icons/63472else.gif)
![](/icons/63472return.gif)
}
}
?>
有
![](/icons/63472yi.gif)
![](/icons/63472de.gif)
![](/icons/63472dou.gif)
![](/icons/63472dou.gif)
![](/icons/63472de.gif)
![](/icons/63472yi.gif)
![](/icons/63472dou.gif)
![](/icons/63472dou2.gif)
![](/icons/63472de.gif)
![](/icons/63472de.gif)
![](/icons/63472dou.gif)
![](/icons/63472yi.gif)
![](/icons/63472de.gif)
![](/icons/63472de.gif)
![](/icons/63472dou.gif)
![](/icons/63472dou2.gif)
接下来是视图——我去掉了HTML以节省空间
![](/icons/63472dou.gif)
![](/icons/63472de.gif)
![](/icons/63472dou2.gif)
<?php
/**
* Binds product data to HTML rendering
*/
![](/icons/63472class.gif)
/**
* Private
* $model an instance of the ProductModel
![](/icons/63472class.gif)
*/
var $model;
/**
* Private
* $output rendered HTML is stored here for display
*/
var $output;
//! A constructor.
/**
* Constucts a
![](/icons/63472new.gif)
* @param $model an instance of the ProductModel
![](/icons/63472class.gif)
*/
function ProductView (&$model) {
$this->model=& $model;
}
//! A manipulator
/**
* Builds the top of an HTML page
* @
![](/icons/63472return.gif)
*/
function header
![](/icons/63472kh.gif)
}
//! A manipulator
/**
* Builds the bottom of an HTML page
* @
![](/icons/63472return.gif)
*/
function footer
![](/icons/63472kh.gif)
}
//! A manipulator
/**
* Displays a single product
* @
![](/icons/63472return.gif)
*/
function productItem($id=1) {
$this->model->listProduct($id);
while ( $product=$this->model->getProduct
![](/icons/63472kh.gif)
// Bind data to HTML
}
}
//! A manipulator
/**
* Builds a product table
* @
![](/icons/63472return.gif)
*/
function productTable($rownum=1) {
$rowsperpage='20';
$this->model->listProducts($rownum,$rowsperpage);
while ( $product=$this->model->getProduct
![](/icons/63472kh.gif)
// Bind data to HTML
}
}
//! An accessor
/**
* Returns the rendered HTML
* @
![](/icons/63472return.gif)
![](/icons/63472string.gif)
*/
function display
![](/icons/63472kh.gif)
![](/icons/63472return.gif)
}
}
?>
最后是控制器
![](/icons/63472dou.gif)
![](/icons/63472yi.gif)
![](/icons/63472dou2.gif)
<?php
/**
* Controls the application
*/
![](/icons/63472class.gif)
//! A constructor.
/**
* Constucts a
![](/icons/63472new.gif)
* @param $model an instance of the ProductModel
![](/icons/63472class.gif)
最新评论