鎺у埗鍣紙controller錛?/strong>
綆鍗曠殑璇存帶鍒跺櫒鏄疻eb搴旂敤涓繘鍏ョ殑HTTP璇鋒眰鏈鍏堣皟鐢ㄧ殑涓閮ㄥ垎銆傚畠媯鏌ユ敹鍒扮殑璇鋒眰錛屾瘮濡備竴浜汫ET鍙橀噺錛屽仛鍑哄悎閫傜殑鍙嶉銆傚湪鍐欏嚭浣犵殑絎竴涓帶鍒跺櫒涔嬪墠錛屼綘寰堥毦寮濮嬬紪鍐欏叾浠栫殑PHP浠g爜銆傛渶甯歌鐨勭敤娉曟槸index.php涓儚switch璇彞鐨勭粨鏋勶細
<?php
switch ($_GET['viewpage']) {
case "news":
$page=new NewsRenderer;
break;
case "links":
$page=new LinksRenderer;
break;
default:
$page=new HomePageRenderer;
break;
}
$page->display();
?>
榪欐浠g爜娣風敤浜嗛潰鍚戣繃紼嬪拰瀵硅薄鐨勪唬鐮侊紝浣嗘槸瀵逛簬灝忕殑绔欑偣鏉ヨ錛岃繖閫氬父鏄渶濂界殑閫夋嫨銆傝櫧鐒朵笂杈圭殑浠g爜榪樺彲浠ヤ紭鍖栥?br />
鎺у埗鍣ㄥ疄闄呬笂鏄敤鏉ヨЕ鍙戞ā鍨嬬殑鏁版嵁鍜岃鍥懼厓绱犱箣闂寸殑緇戝畾鐨勬帶浠躲?br />
渚嬪瓙
榪欓噷鏄竴涓嬌鐢∕VC妯″紡鐨勭畝鍗曚緥瀛愩?br />
棣栧厛鎴戜滑闇瑕佷竴涓暟鎹簱璁塊棶綾伙紝瀹冩槸涓涓櫘閫氱被銆?br />
<?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;
}
}
?>
鍦ㄥ畠涓婅竟鏀句笂妯″瀷銆?br />
<?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;
}
}
?>
鏈変竴鐐硅娉ㄦ剰鐨勬槸錛屽湪妯″瀷鍜屾暟鎹闂被涔嬮棿錛屽畠浠殑浜や簰浠庝笉浼氬浜庝竴琛??娌℃湁澶氳琚紶閫侊紝閭f牱浼氬緢蹇嬌紼嬪紡鎱笅鏉ャ傚悓鏍風殑紼嬪紡瀵逛簬浣跨敤妯″紡鐨勭被錛屽畠鍙渶瑕佸湪鍐呭瓨涓繚鐣欎竴琛岋紙Row錛??鍏朵粬鐨勪氦緇欏凡淇濆瓨鐨勬煡璇㈣祫婧愶紙query resource錛??鎹㈠彞璇濊錛屾垜浠MYSQL鏇挎垜浠繚鎸佺粨鏋溿?br />
鎺ヤ笅鏉ユ槸瑙嗗浘??鎴戝幓鎺変簡HTML浠ヨ妭鐪佺┖闂達紝浣犲彲浠ユ煡鐪嬭繖綃囨枃绔犵殑瀹屾暣浠g爜銆?br />
<?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;
}
}
?>
鏈鍚庢槸鎺у埗鍣紝鎴戜滑灝嗘妸瑙嗗浘瀹炵幇涓轟竴涓瓙綾匯?br />
<?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();
}
}
?>

娉ㄦ剰榪欎笉鏄疄鐜癕VC鐨勫敮涓鏂瑰紡??姣斿浣犲彲浠ョ敤鎺у埗鍣ㄥ疄鐜版ā鍨嬪悓鏃舵暣鍚堣鍥俱傝繖鍙槸婕旂ず妯″紡鐨勪竴縐嶆柟娉曘?br />
鎴戜滑鐨刬ndex.php 鏂囦歡鐪嬭搗鏉ュ儚榪欐牱錛?br />
<?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();
?>
婕備寒鑰岀畝鍗曘?br />
鎴戜滑鏈変竴浜涗嬌鐢ㄦ帶鍒跺櫒鐨勬妧宸э紝鍦≒HP涓綘鍙互榪欐牱鍋氾細
$this->{$_GET['method']}($_GET['param']);
涓涓緩璁槸浣犳渶濂藉畾涔夌▼搴廢RL鐨勫悕瀛楃┖闂村艦寮忥紙namespace錛夛紝閭f牱瀹冧細姣旇緝瑙勮寖姣斿錛?br />
"index.php?class=ProductView&method=productItem&id=4"
閫氳繃瀹冩垜浠彲浠ヨ繖鏍峰鐞嗘垜浠殑鎺у埗鍣細
$view=new $_GET['class'];
$view->{$_GET['method']($_GET['id']);
鏈夋椂鍊欙紝寤虹珛鎺у埗鍣ㄦ槸浠跺緢鍥伴毦鐨勪簨鎯咃紝姣斿褰撲綘鍦ㄥ紑鍙戦熷害鍜岄傚簲鎬т箣闂存潈琛℃椂銆備竴涓幏寰楃伒鎰熺殑濂藉幓澶勬槸Apache group 鐨凧ava Struts錛屽畠鐨勬帶鍒跺櫒瀹屽叏鏄敱XML鏂囨。瀹氫箟鐨勩?
鐩稿叧闄勪歡錛?/strong>鏈枃瀹屾暣瀹炰緥
鏈枃鑻辨枃鍘熺増鍦板潃錛?/strong>http://www.phppatterns.com/index.php/article/articleview/11/

]]>