
- 本栏最新文章
- PHP实现网页自动更新块 05-08
- PHP开发中文件操作疑难问答 05-08
- 用PHP与XML 联手进行网站编程 04-29
- 将PHP作为Shell脚本语言使用 04-23
- 用 PHPRPC 实现 Ajax 级联下拉菜单 04-23
- PHP安装简明指南 04-22
- 在PHP中利用XML技术构造远程服务(下) 04-14
- 在PHP中利用XML技术构造远程服务(上) 04-14
- PHP动态网页开发中常用的一些函数 04-04
- PHP在大型网站开发中的一些问题 04-04

- 本栏推荐文章
- ASP.NET设计网络硬盘之查看文件夹 04-29
- ASP.NET设计网络硬盘之文件夹实现 04-29
- ASP.NET设计网络硬盘之上传文件 04-29
- 小试ASP.NET 2.0的兼容性 04-29
- ASP 系列函数大全 04-29
- Asp.net Mvc Framework 九 (View与Controlle... 04-04
- 【翻译】动态调用样式表代码 04-04
- Flash AS3.0 实现FLASH的“动态链接库” 03-31
- Flash AS3.0 爽快使用XML 03-31
- MySQL的LIST分区体验与总结 03-27
MVC模式的PHP实现 (3)
最后是控制器,我们将把视图实现为一个子类。
<?php
/**
* Controls the application
*/
class ProductController extends ProductView {
//! A constructor.
/**
* Constucts a new ProductController object
* @param $model an instance of the ProductModel class
* @param $getvars the incoming HTTP GET method variables
*/
function ProductController (&$model,$getvars=null) {
ProductView::ProductView($model);
$this->header();
switch ( $getvars['view'] ) {
case "product":
$this->productItem($getvars['id']);
break;
default:
if ( empty ($getvars['rownum']) ) {
$this->productTable();
} else {
$this->productTable($getvars['rownum']);
}
break;
}
$this->footer();
}
}
?>
注意这不是实现MVC的唯一方式——比如你可以用控制器实现模型同时整合视图。这只是演示模式的一种方法。
我们的index.php 文件看起来像这样:
<?php
require_once('lib/DataAccess.php');
require_once('lib/ProductModel.php');
require_once('lib/ProductView.php');
require_once('lib/ProductController.php');
$dao=& new DataAccess ('localhost','user','pass','dbname');
$productModel=& new ProductModel($dao);
$productController=& new ProductController($productModel,$_GET);
echo $productController->display();
?>
漂亮而简单。
我们有一些使用控制器的技巧,在PHP中你可以这样做:
$this->{$_GET['method']}($_GET['param']);
一个建议是你最好定义程序URL的名字空间形式(namespace),那样它会比较规范比如:
"index.php?class=ProductView&method=productItem&id=4"
通过它我们可以这样处理我们的控制器:
$view=new $_GET['class'];
$view->{$_GET['method']($_GET['id']);
有时候,建立控制器是件很困难的事情,比如当你在开发速度和适应性之间权衡时。一个获得灵感的好去处是Apache group 的Java Struts,它的控制器完全是由XML文档定义的。
本文英文原版地址:http://www.phppatterns.com/index.php/article/articleview/11/





