MVCģʽµÄPHPʵÏÖ
À´Ô´:www.phpres.com ×÷ÕߣºAngelover ³ö´¦£ºwww.phpres.com 2007-7-27 18:11:14 ½øÈëÌÖÂÛ×鹨 ¼ü ´Ê£º
ʵÏÖ Ä£Ê½ ÎÒÃÇ Ä£ÐÍ ¿ØÖÆÆ÷ // the Ò»¸ö Êý¾Ý function
MVCģʽÔÚÍøÕ¾¼Ü¹¹ÖÐÊ®·Ö³£¼û¡£ËüÔÊÐíÎÒÃǽ¨Á¢Ò»¸öÈý²ã½á¹¹µÄÓ¦ÓóÌʽ£¬´Ó´úÂëÖзÖÀë³öÓÐÓõIJ㣬°ïÖúÉè¼ÆÊ¦ºÍ¿ª·¢ÕßÐͬ¹¤×÷ÒÔ¼°Ìá¸ßÎÒÃÇά»¤ºÍÀ©Õ¹¼ÈÓгÌʽµÄÄÜÁ¦¡£
ÊÓͼ£¨View£©
“ÊÓͼ”Ö÷ÒªÖ¸ÎÒÃÇË͵½Webä¯ÀÀÆ÷µÄ×îÖÕ½á¹û??±ÈÈçÎÒÃǵĽű¾Éú³ÉµÄHTML¡£µ±Ëµµ½ÊÓͼʱ£¬ºÜ¶àÈËÏëµ½µÄÊÇÄ£°æ£¬µ«ÊǰÑÄ£°å·½°¸½Ð×öÊÓͼµÄÕýÈ·ÐÔÊÇÖµµÃ»³Òɵġ£
¶ÔÊÓͼÀ´Ëµ£¬×îÖØÒªµÄÊÂÇé¿ÉÄÜÊÇËüÓ¦¸ÃÊÇ“×ÔÎÒÒâʶ£¨self aware£©”µÄ£¬ÊÓͼ±»äÖȾ£¨render£©Ê±£¬ÊÓͼµÄÔªËØÄÜÒâʶµ½×Ô¼ºÔÚ¸ü´ó¿ò¼ÜÖеĽÇÉ«¡£
ÒÔXMLΪÀý£¬¿ÉÒÔ˵XMLÔÚ±»½âÎöʱ£¬DOM APIÓÐ×ÅÕâÑùµÄÈÏÖª??Ò»¸öDOMÊ÷ÀïµÄ½ÚµãÖªµÀËüÔÚÄÄÀïºÍËü°üº¬ÁËʲô¡£ £¨µ±Ò»¸öXMLÎĵµÖеĽڵãÓÃSAX½âÎöʱֻÓе±½âÎöµ½¸Ã½ÚµãʱËü²ÅÓÐÒâÒå¡££©
¾ø´ó¶àÊýÄ£°å·½°¸Ê¹Óüòµ¥µÄ¹ý³ÌÓïÑÔºÍÕâÑùµÄÄ£°å±êÇ©£º
<p>{some_text}</p>
<p>{some_more_text}</p>
ËüÃÇÔÚÎĵµÖÐûÓÐÒâÒ壬ËüÃÇ´ú±íµÄÒâÒåÖ»ÊÇPHP½«ÓÃÆäËûµÄ¶«Î÷À´Ìæ»»Ëü¡£
Èç¹ûÄãͬÒâÕâÖÖ¶ÔÊÓͼµÄËÉÉ¢ÃèÊö£¬ÄãÒ²¾Í»áͬÒâ¾ø´ó¶àÊýÄ£°å·½°¸²¢Ã»ÓÐÓÐЧµÄ·ÖÀëÊÓͼºÍÄ£ÐÍ¡£Ä£°å±êÇ©½«±»Ìæ»»³Éʲô´æ·ÅÔÚÄ£ÐÍÖС£
ÔÚÄãʵÏÖÊÓͼʱÎÊ×Ô¼º¼¸¸öÎÊÌ⣺“È«ÌåÊÓͼµÄÌæ»»ÈÝÒ×Â𣿔“ʵÏÖÒ»¸öÐÂÊÓͼҪ¶à¾Ã£¿” “ÄܺÜÈÝÒ×µÄÌæ»»ÊÓͼµÄÃèÊöÓïÑÔÂ𣿣¨±ÈÈçÔÚͬһ¸öÊÓͼÖÐÓÃSOAPÎĵµÌæ»»HTMLÎĵµ£©”
Ä£ÐÍ£¨Model£©
Ä£ÐÍ´ú±íÁ˳ÌÐòÂß¼¡££¨ÔÚÆóÒµ¼¶³ÌÐòÖо³£³ÆÎªÒµÎñ²ã£¨business layer£©£©
×ܵÄÀ´Ëµ£¬Ä£Ð͵ÄÈÎÎñÊǰÑÔÓÐÊý¾Ýת»»³É°üº¬Ä³Ð©ÒâÒåµÄÊý¾Ý£¬ÕâЩÊý¾Ý½«±»ÊÓͼËùÏÔʾ¡£Í¨³££¬Ä£Ðͽ«·â×°Êý¾Ý²éѯ£¬¿ÉÄÜͨ¹ýһЩ³éÏóÊý¾ÝÀࣨÊý¾Ý·ÃÎʲ㣩À´ÊµÏÖ²éѯ¡£¾ÙÀý˵£¬ÄãÏ£Íû¼ÆËãÓ¢¹úÄê¶È½µÓêÁ¿£¨Ö»ÊÇΪÁ˸øÄã×Ô¼ºÕÒ¸öºÃµãµÄ¶È¼ÙµØ£©£¬Ä£Ðͽ«½ÓÊÕÊ®ÄêÖÐÿÌìµÄ½µÓêÁ¿£¬¼ÆËã³öƽ¾ùÖµ£¬ÔÙ´«µÝ¸øÊÓͼ¡£
¿ØÖÆÆ÷£¨controller£©
¼òµ¥µÄ˵¿ØÖÆÆ÷ÊÇWebÓ¦ÓÃÖнøÈëµÄHTTPÇëÇó×îÏȵ÷ÓõÄÒ»²¿·Ö¡£Ëü¼ì²éÊÕµ½µÄÇëÇ󣬱ÈÈçһЩGET±äÁ¿£¬×ö³öºÏÊʵķ´À¡¡£ÔÚд³öÄãµÄµÚÒ»¸ö¿ØÖÆÆ÷֮ǰ£¬ÄãºÜÄÑ¿ªÊ¼±àдÆäËûµÄPHP´úÂë¡£×î³£¼ûµÄÓ÷¨ÊÇindex.phpÖÐÏñswitchÓï¾äµÄ½á¹¹£º
<?php switch (MVCģʽÔÚÍøÕ¾¼Ü¹¹ÖÐÊ®·Ö³£¼û¡£ËüÔÊÐíÎÒÃǽ¨Á¢Ò»¸öÈý²ã½á¹¹µÄÓ¦ÓóÌʽ£¬´Ó´úÂëÖзÖÀë³öÓÐÓõIJ㣬°ïÖúÉè¼ÆÊ¦ºÍ¿ª·¢ÕßÐͬ¹¤×÷ÒÔ¼°Ìá¸ßÎÒÃÇά»¤ºÍÀ©Õ¹¼ÈÓгÌʽµÄÄÜÁ¦¡£
ÊÓͼ£¨View£©
“ÊÓͼ”Ö÷ÒªÖ¸ÎÒÃÇË͵½Webä¯ÀÀÆ÷µÄ×îÖÕ½á¹û??±ÈÈçÎÒÃǵĽű¾Éú³ÉµÄHTML¡£µ±Ëµµ½ÊÓͼʱ£¬ºÜ¶àÈËÏëµ½µÄÊÇÄ£°æ£¬µ«ÊǰÑÄ£°å·½°¸½Ð×öÊÓͼµÄÕýÈ·ÐÔÊÇÖµµÃ»³Òɵġ£
¶ÔÊÓͼÀ´Ëµ£¬×îÖØÒªµÄÊÂÇé¿ÉÄÜÊÇËüÓ¦¸ÃÊÇ“×ÔÎÒÒâʶ£¨self aware£©”µÄ£¬ÊÓͼ±»äÖȾ£¨render£©Ê±£¬ÊÓͼµÄÔªËØÄÜÒâʶµ½×Ô¼ºÔÚ¸ü´ó¿ò¼ÜÖеĽÇÉ«¡£
ÒÔXMLΪÀý£¬¿ÉÒÔ˵XMLÔÚ±»½âÎöʱ£¬DOM APIÓÐ×ÅÕâÑùµÄÈÏÖª??Ò»¸öDOMÊ÷ÀïµÄ½ÚµãÖªµÀËüÔÚÄÄÀïºÍËü°üº¬ÁËʲô¡£ £¨µ±Ò»¸öXMLÎĵµÖеĽڵãÓÃSAX½âÎöʱֻÓе±½âÎöµ½¸Ã½ÚµãʱËü²ÅÓÐÒâÒå¡££©
¾ø´ó¶àÊýÄ£°å·½°¸Ê¹Óüòµ¥µÄ¹ý³ÌÓïÑÔºÍÕâÑùµÄÄ£°å±êÇ©£º
<p>{some_text}</p> <p>{some_more_text}</p>
ËüÃÇÔÚÎĵµÖÐûÓÐÒâÒ壬ËüÃÇ´ú±íµÄÒâÒåÖ»ÊÇPHP½«ÓÃÆäËûµÄ¶«Î÷À´Ìæ»»Ëü¡£
Èç¹ûÄãͬÒâÕâÖÖ¶ÔÊÓͼµÄËÉÉ¢ÃèÊö£¬ÄãÒ²¾Í»áͬÒâ¾ø´ó¶àÊýÄ£°å·½°¸²¢Ã»ÓÐÓÐЧµÄ·ÖÀëÊÓͼºÍÄ£ÐÍ¡£Ä£°å±êÇ©½«±»Ìæ»»³Éʲô´æ·ÅÔÚÄ£ÐÍÖС£
ÔÚÄãʵÏÖÊÓͼʱÎÊ×Ô¼º¼¸¸öÎÊÌ⣺“È«ÌåÊÓͼµÄÌæ»»ÈÝÒ×Â𣿔“ʵÏÖÒ»¸öÐÂÊÓͼҪ¶à¾Ã£¿” “ÄܺÜÈÝÒ×µÄÌæ»»ÊÓͼµÄÃèÊöÓïÑÔÂ𣿣¨±ÈÈçÔÚͬһ¸öÊÓͼÖÐÓÃSOAPÎĵµÌæ»»HTMLÎĵµ£©”
Ä£ÐÍ£¨Model£©
Ä£ÐÍ´ú±íÁ˳ÌÐòÂß¼¡££¨ÔÚÆóÒµ¼¶³ÌÐòÖо³£³ÆÎªÒµÎñ²ã£¨business layer£©£©
×ܵÄÀ´Ëµ£¬Ä£Ð͵ÄÈÎÎñÊǰÑÔÓÐÊý¾Ýת»»³É°üº¬Ä³Ð©ÒâÒåµÄÊý¾Ý£¬ÕâЩÊý¾Ý½«±»ÊÓͼËùÏÔʾ¡£Í¨³££¬Ä£Ðͽ«·â×°Êý¾Ý²éѯ£¬¿ÉÄÜͨ¹ýһЩ³éÏóÊý¾ÝÀࣨÊý¾Ý·ÃÎʲ㣩À´ÊµÏÖ²éѯ¡£¾ÙÀý˵£¬ÄãÏ£Íû¼ÆËãÓ¢¹úÄê¶È½µÓêÁ¿£¨Ö»ÊÇΪÁ˸øÄã×Ô¼ºÕÒ¸öºÃµãµÄ¶È¼ÙµØ£©£¬Ä£Ðͽ«½ÓÊÕÊ®ÄêÖÐÿÌìµÄ½µÓêÁ¿£¬¼ÆËã³öƽ¾ùÖµ£¬ÔÙ´«µÝ¸øÊÓͼ¡£
¿ØÖÆÆ÷£¨controller£©
¼òµ¥µÄ˵¿ØÖÆÆ÷ÊÇWebÓ¦ÓÃÖнøÈëµÄHTTPÇëÇó×îÏȵ÷ÓõÄÒ»²¿·Ö¡£Ëü¼ì²éÊÕµ½µÄÇëÇ󣬱ÈÈçһЩGET±äÁ¿£¬×ö³öºÏÊʵķ´À¡¡£ÔÚд³öÄãµÄµÚÒ»¸ö¿ØÖÆÆ÷֮ǰ£¬ÄãºÜÄÑ¿ªÊ¼±àдÆäËûµÄPHP´úÂë¡£×î³£¼ûµÄÓ÷¨ÊÇindex.phpÖÐÏñswitchÓï¾äµÄ½á¹¹£º
___FCKpd___1
Õâ¶Î´úÂë»ìÓÃÁËÃæÏò¹ý³ÌºÍ¶ÔÏóµÄ´úÂ룬µ«ÊǶÔÓÚСµÄÕ¾µãÀ´Ëµ£¬Õâͨ³£ÊÇ×îºÃµÄÑ¡Ôñ¡£ËäÈ»ÉϱߵĴúÂ뻹¿ÉÒÔÓÅ»¯¡£
¿ØÖÆÆ÷ʵ¼ÊÉÏÊÇÓÃÀ´´¥·¢Ä£Ð͵ÄÊý¾ÝºÍÊÓÍ¼ÔªËØÖ®¼äµÄ°ó¶¨µÄ¿Ø¼þ¡£
Àý×Ó
ÕâÀïÊÇÒ»¸öʹÓÃMVCģʽµÄ¼òµ¥Àý×Ó¡£
Ê×ÏÈÎÒÃÇÐèÒªÒ»¸öÊý¾Ý¿â·ÃÎÊÀ࣬ËüÊÇÒ»¸öÆÕͨÀà¡£
<?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; } } ?>
ÔÚËüÉϱ߷ÅÉÏÄ£ÐÍ¡£
<?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ÌæÎÒÃDZ£³Ö½á¹û¡£
½ÓÏÂÀ´ÊÇÊÓͼ??ÎÒÈ¥µôÁË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 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,MVCģʽÔÚÍøÕ¾¼Ü¹¹ÖÐÊ®·Ö³£¼û¡£ËüÔÊÐíÎÒÃǽ¨Á¢Ò»¸öÈý²ã½á¹¹µÄÓ¦ÓóÌʽ£¬´Ó´úÂëÖзÖÀë³öÓÐÓõIJ㣬°ïÖúÉè¼ÆÊ¦ºÍ¿ª·¢ÕßÐͬ¹¤×÷ÒÔ¼°Ìá¸ßÎÒÃÇά»¤ºÍÀ©Õ¹¼ÈÓгÌʽµÄÄÜÁ¦¡£
ÊÓͼ£¨View£©
“ÊÓͼ”Ö÷ÒªÖ¸ÎÒÃÇË͵½Webä¯ÀÀÆ÷µÄ×îÖÕ½á¹û??±ÈÈçÎÒÃǵĽű¾Éú³ÉµÄHTML¡£µ±Ëµµ½ÊÓͼʱ£¬ºÜ¶àÈËÏëµ½µÄÊÇÄ£°æ£¬µ«ÊǰÑÄ£°å·½°¸½Ð×öÊÓͼµÄÕýÈ·ÐÔÊÇÖµµÃ»³Òɵġ£
¶ÔÊÓͼÀ´Ëµ£¬×îÖØÒªµÄÊÂÇé¿ÉÄÜÊÇËüÓ¦¸ÃÊÇ“×ÔÎÒÒâʶ£¨self aware£©”µÄ£¬ÊÓͼ±»äÖȾ£¨render£©Ê±£¬ÊÓͼµÄÔªËØÄÜÒâʶµ½×Ô¼ºÔÚ¸ü´ó¿ò¼ÜÖеĽÇÉ«¡£
ÒÔXMLΪÀý£¬¿ÉÒÔ˵XMLÔÚ±»½âÎöʱ£¬DOM APIÓÐ×ÅÕâÑùµÄÈÏÖª??Ò»¸öDOMÊ÷ÀïµÄ½ÚµãÖªµÀËüÔÚÄÄÀïºÍËü°üº¬ÁËʲô¡£ £¨µ±Ò»¸öXMLÎĵµÖеĽڵãÓÃSAX½âÎöʱֻÓе±½âÎöµ½¸Ã½ÚµãʱËü²ÅÓÐÒâÒå¡££©
¾ø´ó¶àÊýÄ£°å·½°¸Ê¹Óüòµ¥µÄ¹ý³ÌÓïÑÔºÍÕâÑùµÄÄ£°å±êÇ©£º
<p>{some_text}</p> <p>{some_more_text}</p>
ËüÃÇÔÚÎĵµÖÐûÓÐÒâÒ壬ËüÃÇ´ú±íµÄÒâÒåÖ»ÊÇPHP½«ÓÃÆäËûµÄ¶«Î÷À´Ìæ»»Ëü¡£
Èç¹ûÄãͬÒâÕâÖÖ¶ÔÊÓͼµÄËÉÉ¢ÃèÊö£¬ÄãÒ²¾Í»áͬÒâ¾ø´ó¶àÊýÄ£°å·½°¸²¢Ã»ÓÐÓÐЧµÄ·ÖÀëÊÓͼºÍÄ£ÐÍ¡£Ä£°å±êÇ©½«±»Ìæ»»³Éʲô´æ·ÅÔÚÄ£ÐÍÖС£
ÔÚÄãʵÏÖÊÓͼʱÎÊ×Ô¼º¼¸¸öÎÊÌ⣺“È«ÌåÊÓͼµÄÌæ»»ÈÝÒ×Â𣿔“ʵÏÖÒ»¸öÐÂÊÓͼҪ¶à¾Ã£¿” “ÄܺÜÈÝÒ×µÄÌæ»»ÊÓͼµÄÃèÊöÓïÑÔÂ𣿣¨±ÈÈçÔÚͬһ¸öÊÓͼÖÐÓÃSOAPÎĵµÌæ»»HTMLÎĵµ£©”
Ä£ÐÍ£¨Model£©
Ä£ÐÍ´ú±íÁ˳ÌÐòÂß¼¡££¨ÔÚÆóÒµ¼¶³ÌÐòÖо³£³ÆÎªÒµÎñ²ã£¨business layer£©£©
×ܵÄÀ´Ëµ£¬Ä£Ð͵ÄÈÎÎñÊǰÑÔÓÐÊý¾Ýת»»³É°üº¬Ä³Ð©ÒâÒåµÄÊý¾Ý£¬ÕâЩÊý¾Ý½«±»ÊÓͼËùÏÔʾ¡£Í¨³££¬Ä£Ðͽ«·â×°Êý¾Ý²éѯ£¬¿ÉÄÜͨ¹ýһЩ³éÏóÊý¾ÝÀࣨÊý¾Ý·ÃÎʲ㣩À´ÊµÏÖ²éѯ¡£¾ÙÀý˵£¬ÄãÏ£Íû¼ÆËãÓ¢¹úÄê¶È½µÓêÁ¿£¨Ö»ÊÇΪÁ˸øÄã×Ô¼ºÕÒ¸öºÃµãµÄ¶È¼ÙµØ£©£¬Ä£Ðͽ«½ÓÊÕÊ®ÄêÖÐÿÌìµÄ½µÓêÁ¿£¬¼ÆËã³öƽ¾ùÖµ£¬ÔÙ´«µÝ¸øÊÓͼ¡£
¿ØÖÆÆ÷£¨controller£©
¼òµ¥µÄ˵¿ØÖÆÆ÷ÊÇWebÓ¦ÓÃÖнøÈëµÄHTTPÇëÇó×îÏȵ÷ÓõÄÒ»²¿·Ö¡£Ëü¼ì²éÊÕµ½µÄÇëÇ󣬱ÈÈçһЩGET±äÁ¿£¬×ö³öºÏÊʵķ´À¡¡£ÔÚд³öÄãµÄµÚÒ»¸ö¿ØÖÆÆ÷֮ǰ£¬ÄãºÜÄÑ¿ªÊ¼±àдÆäËûµÄPHP´úÂë¡£×î³£¼ûµÄÓ÷¨ÊÇindex.phpÖÐÏñswitchÓï¾äµÄ½á¹¹£º
<?php switch (MVCģʽÔÚÍøÕ¾¼Ü¹¹ÖÐÊ®·Ö³£¼û¡£ËüÔÊÐíÎÒÃǽ¨Á¢Ò»¸öÈý²ã½á¹¹µÄÓ¦ÓóÌʽ£¬´Ó´úÂëÖзÖÀë³öÓÐÓõIJ㣬°ïÖúÉè¼ÆÊ¦ºÍ¿ª·¢ÕßÐͬ¹¤×÷ÒÔ¼°Ìá¸ßÎÒÃÇά»¤ºÍÀ©Õ¹¼ÈÓгÌʽµÄÄÜÁ¦¡£
ÊÓͼ£¨View£©
“ÊÓͼ”Ö÷ÒªÖ¸ÎÒÃÇË͵½Webä¯ÀÀÆ÷µÄ×îÖÕ½á¹û??±ÈÈçÎÒÃǵĽű¾Éú³ÉµÄHTML¡£µ±Ëµµ½ÊÓͼʱ£¬ºÜ¶àÈËÏëµ½µÄÊÇÄ£°æ£¬µ«ÊǰÑÄ£°å·½°¸½Ð×öÊÓͼµÄÕýÈ·ÐÔÊÇÖµµÃ»³Òɵġ£
¶ÔÊÓͼÀ´Ëµ£¬×îÖØÒªµÄÊÂÇé¿ÉÄÜÊÇËüÓ¦¸ÃÊÇ“×ÔÎÒÒâʶ£¨self aware£©”µÄ£¬ÊÓͼ±»äÖȾ£¨render£©Ê±£¬ÊÓͼµÄÔªËØÄÜÒâʶµ½×Ô¼ºÔÚ¸ü´ó¿ò¼ÜÖеĽÇÉ«¡£
ÒÔXMLΪÀý£¬¿ÉÒÔ˵XMLÔÚ±»½âÎöʱ£¬DOM APIÓÐ×ÅÕâÑùµÄÈÏÖª??Ò»¸öDOMÊ÷ÀïµÄ½ÚµãÖªµÀËüÔÚÄÄÀïºÍËü°üº¬ÁËʲô¡£ £¨µ±Ò»¸öXMLÎĵµÖеĽڵãÓÃSAX½âÎöʱֻÓе±½âÎöµ½¸Ã½ÚµãʱËü²ÅÓÐÒâÒå¡££©
¾ø´ó¶àÊýÄ£°å·½°¸Ê¹Óüòµ¥µÄ¹ý³ÌÓïÑÔºÍÕâÑùµÄÄ£°å±êÇ©£º
<p>{some_text}</p> <p>{some_more_text}</p>
ËüÃÇÔÚÎĵµÖÐûÓÐÒâÒ壬ËüÃÇ´ú±íµÄÒâÒåÖ»ÊÇPHP½«ÓÃÆäËûµÄ¶«Î÷À´Ìæ»»Ëü¡£
Èç¹ûÄãͬÒâÕâÖÖ¶ÔÊÓͼµÄËÉÉ¢ÃèÊö£¬ÄãÒ²¾Í»áͬÒâ¾ø´ó¶àÊýÄ£°å·½°¸²¢Ã»ÓÐÓÐЧµÄ·ÖÀëÊÓͼºÍÄ£ÐÍ¡£Ä£°å±êÇ©½«±»Ìæ»»³Éʲô´æ·ÅÔÚÄ£ÐÍÖС£
ÔÚÄãʵÏÖÊÓͼʱÎÊ×Ô¼º¼¸¸öÎÊÌ⣺“È«ÌåÊÓͼµÄÌæ»»ÈÝÒ×Â𣿔“ʵÏÖÒ»¸öÐÂÊÓͼҪ¶à¾Ã£¿” “ÄܺÜÈÝÒ×µÄÌæ»»ÊÓͼµÄÃèÊöÓïÑÔÂ𣿣¨±ÈÈçÔÚͬһ¸öÊÓͼÖÐÓÃSOAPÎĵµÌæ»»HTMLÎĵµ£©”
Ä£ÐÍ£¨Model£©
Ä£ÐÍ´ú±íÁ˳ÌÐòÂß¼¡££¨ÔÚÆóÒµ¼¶³ÌÐòÖо³£³ÆÎªÒµÎñ²ã£¨business layer£©£©
×ܵÄÀ´Ëµ£¬Ä£Ð͵ÄÈÎÎñÊǰÑÔÓÐÊý¾Ýת»»³É°üº¬Ä³Ð©ÒâÒåµÄÊý¾Ý£¬ÕâЩÊý¾Ý½«±»ÊÓͼËùÏÔʾ¡£Í¨³££¬Ä£Ðͽ«·â×°Êý¾Ý²éѯ£¬¿ÉÄÜͨ¹ýһЩ³éÏóÊý¾ÝÀࣨÊý¾Ý·ÃÎʲ㣩À´ÊµÏÖ²éѯ¡£¾ÙÀý˵£¬ÄãÏ£Íû¼ÆËãÓ¢¹úÄê¶È½µÓêÁ¿£¨Ö»ÊÇΪÁ˸øÄã×Ô¼ºÕÒ¸öºÃµãµÄ¶È¼ÙµØ£©£¬Ä£Ðͽ«½ÓÊÕÊ®ÄêÖÐÿÌìµÄ½µÓêÁ¿£¬¼ÆËã³öƽ¾ùÖµ£¬ÔÙ´«µÝ¸øÊÓͼ¡£
¿ØÖÆÆ÷£¨controller£©
¼òµ¥µÄ˵¿ØÖÆÆ÷ÊÇWebÓ¦ÓÃÖнøÈëµÄHTTPÇëÇó×îÏȵ÷ÓõÄÒ»²¿·Ö¡£Ëü¼ì²éÊÕµ½µÄÇëÇ󣬱ÈÈçһЩGET±äÁ¿£¬×ö³öºÏÊʵķ´À¡¡£ÔÚд³öÄãµÄµÚÒ»¸ö¿ØÖÆÆ÷֮ǰ£¬ÄãºÜÄÑ¿ªÊ¼±àдÆäËûµÄPHP´úÂë¡£×î³£¼ûµÄÓ÷¨ÊÇindex.phpÖÐÏñswitchÓï¾äµÄ½á¹¹£º
___FCKpd___1
Õâ¶Î´úÂë»ìÓÃÁËÃæÏò¹ý³ÌºÍ¶ÔÏóµÄ´úÂ룬µ«ÊǶÔÓÚСµÄÕ¾µãÀ´Ëµ£¬Õâͨ³£ÊÇ×îºÃµÄÑ¡Ôñ¡£ËäÈ»ÉϱߵĴúÂ뻹¿ÉÒÔÓÅ»¯¡£
¿ØÖÆÆ÷ʵ¼ÊÉÏÊÇÓÃÀ´´¥·¢Ä£Ð͵ÄÊý¾ÝºÍÊÓÍ¼ÔªËØÖ®¼äµÄ°ó¶¨µÄ¿Ø¼þ¡£
Àý×Ó
ÕâÀïÊÇÒ»¸öʹÓÃMVCģʽµÄ¼òµ¥Àý×Ó¡£
Ê×ÏÈÎÒÃÇÐèÒªÒ»¸öÊý¾Ý¿â·ÃÎÊÀ࣬ËüÊÇÒ»¸öÆÕͨÀà¡£
<?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; } } ?>
ÔÚËüÉϱ߷ÅÉÏÄ£ÐÍ¡£
<?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ÌæÎÒÃDZ£³Ö½á¹û¡£
½ÓÏÂÀ´ÊÇÊÓͼ??ÎÒÈ¥µôÁË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 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ģʽµÄ¼òµ¥Àý×Ó¡£
Ê×ÏÈÎÒÃÇÐèÒªÒ»¸öÊý¾Ý¿â·ÃÎÊÀ࣬ËüÊÇÒ»¸öÆÕͨÀà¡£
___FCKpd___2
ÔÚËüÉϱ߷ÅÉÏÄ£ÐÍ¡£
___FCKpd___3
ÓÐÒ»µãҪעÒâµÄÊÇ£¬ÔÚÄ£ÐͺÍÊý¾Ý·ÃÎÊÀàÖ®¼ä£¬ËüÃǵĽ»»¥´Ó²»»á¶àÓÚÒ»ÐÐ??ûÓжàÐб»´«ËÍ£¬ÄÇÑù»áºÜ¿ìʹ³ÌʽÂýÏÂÀ´¡£Í¬ÑùµÄ³Ìʽ¶ÔÓÚʹÓÃģʽµÄÀ࣬ËüÖ»ÐèÒªÔÚÄÚ´æÖб£ÁôÒ»ÐУ¨Row£©??ÆäËûµÄ½»¸øÒѱ£´æµÄ²éѯ×ÊÔ´£¨query resource£©??»»¾ä»°Ëµ£¬ÎÒÃÇÈÃMYSQLÌæÎÒÃDZ£³Ö½á¹û¡£
½ÓÏÂÀ´ÊÇÊÓͼ??ÎÒÈ¥µôÁËHTMLÒÔ½ÚÊ¡¿Õ¼ä£¬Äã¿ÉÒԲ鿴ÕâÆªÎÄÕµÄÍêÕû´úÂë¡£
___FCKpd___4
×îºóÊÇ¿ØÖÆÆ÷£¬ÎÒÃǽ«°ÑÊÓͼʵÏÖΪһ¸ö×ÓÀà¡£
___FCKpd___5
ƯÁÁ¶ø¼òµ¥¡£
ÎÒÃÇÓÐһЩʹÓÿØÖÆÆ÷µÄ¼¼ÇÉ£¬ÔÚPHPÖÐÄã¿ÉÒÔÕâÑù×ö£º
___FCKpd___7
Ò»¸ö½¨ÒéÊÇÄã×îºÃ¶¨Òå³ÌÐòURLµÄÃû×Ö¿Õ¼äÐÎʽ£¨namespace£©£¬ÄÇÑùËü»á±È½Ï¹æ·¶±ÈÈ磺
___FCKpd___8
ͨ¹ýËüÎÒÃÇ¿ÉÒÔÕâÑù´¦ÀíÎÒÃǵĿØÖÆÆ÷£º
___FCKpd___9
ÓÐʱºò£¬½¨Á¢¿ØÖÆÆ÷ÊǼþºÜÀ§ÄѵÄÊÂÇ飬±ÈÈçµ±ÄãÔÚ¿ª·¢ËٶȺÍÊÊÓ¦ÐÔÖ®¼äȨºâʱ¡£Ò»¸ö»ñµÃÁé¸ÐµÄºÃÈ¥´¦ÊÇApache group µÄJava Struts£¬ËüµÄ¿ØÖÆÆ÷ÍêÈ«ÊÇÓÉXMLÎĵµ¶¨ÒåµÄ¡£ GET['viewpage']) { case "news": $page=new NewsRenderer; break; case "links": $page=new LinksRenderer; break; default: $page=new HomePageRenderer; break; } $page->display(); ?>
×¢ÒâÕâ²»ÊÇʵÏÖMVCµÄΨһ·½Ê½??±ÈÈçÄã¿ÉÒÔÓÿØÖÆÆ÷ʵÏÖÄ£ÐÍͬʱÕûºÏÊÓͼ¡£ÕâÖ»ÊÇÑÝʾģʽµÄÒ»ÖÖ·½·¨¡£
ÎÒÃǵÄindex.php Îļþ¿´ÆðÀ´ÏñÕâÑù£º
___FCKpd___6
ƯÁÁ¶ø¼òµ¥¡£
ÎÒÃÇÓÐһЩʹÓÿØÖÆÆ÷µÄ¼¼ÇÉ£¬ÔÚPHPÖÐÄã¿ÉÒÔÕâÑù×ö£º
$this->{MVCģʽÔÚÍøÕ¾¼Ü¹¹ÖÐÊ®·Ö³£¼û¡£ËüÔÊÐíÎÒÃǽ¨Á¢Ò»¸öÈý²ã½á¹¹µÄÓ¦ÓóÌʽ£¬´Ó´úÂëÖзÖÀë³öÓÐÓõIJ㣬°ïÖúÉè¼ÆÊ¦ºÍ¿ª·¢ÕßÐͬ¹¤×÷ÒÔ¼°Ìá¸ßÎÒÃÇά»¤ºÍÀ©Õ¹¼ÈÓгÌʽµÄÄÜÁ¦¡£
ÊÓͼ£¨View£©
“ÊÓͼ”Ö÷ÒªÖ¸ÎÒÃÇË͵½Webä¯ÀÀÆ÷µÄ×îÖÕ½á¹û??±ÈÈçÎÒÃǵĽű¾Éú³ÉµÄHTML¡£µ±Ëµµ½ÊÓͼʱ£¬ºÜ¶àÈËÏëµ½µÄÊÇÄ£°æ£¬µ«ÊǰÑÄ£°å·½°¸½Ð×öÊÓͼµÄÕýÈ·ÐÔÊÇÖµµÃ»³Òɵġ£
¶ÔÊÓͼÀ´Ëµ£¬×îÖØÒªµÄÊÂÇé¿ÉÄÜÊÇËüÓ¦¸ÃÊÇ“×ÔÎÒÒâʶ£¨self aware£©”µÄ£¬ÊÓͼ±»äÖȾ£¨render£©Ê±£¬ÊÓͼµÄÔªËØÄÜÒâʶµ½×Ô¼ºÔÚ¸ü´ó¿ò¼ÜÖеĽÇÉ«¡£
ÒÔXMLΪÀý£¬¿ÉÒÔ˵XMLÔÚ±»½âÎöʱ£¬DOM APIÓÐ×ÅÕâÑùµÄÈÏÖª??Ò»¸öDOMÊ÷ÀïµÄ½ÚµãÖªµÀËüÔÚÄÄÀïºÍËü°üº¬ÁËʲô¡£ £¨µ±Ò»¸öXMLÎĵµÖеĽڵãÓÃSAX½âÎöʱֻÓе±½âÎöµ½¸Ã½ÚµãʱËü²ÅÓÐÒâÒå¡££©
¾ø´ó¶àÊýÄ£°å·½°¸Ê¹Óüòµ¥µÄ¹ý³ÌÓïÑÔºÍÕâÑùµÄÄ£°å±êÇ©£º
<p>{some_text}</p> <p>{some_more_text}</p>
ËüÃÇÔÚÎĵµÖÐûÓÐÒâÒ壬ËüÃÇ´ú±íµÄÒâÒåÖ»ÊÇPHP½«ÓÃÆäËûµÄ¶«Î÷À´Ìæ»»Ëü¡£
Èç¹ûÄãͬÒâÕâÖÖ¶ÔÊÓͼµÄËÉÉ¢ÃèÊö£¬ÄãÒ²¾Í»áͬÒâ¾ø´ó¶àÊýÄ£°å·½°¸²¢Ã»ÓÐÓÐЧµÄ·ÖÀëÊÓͼºÍÄ£ÐÍ¡£Ä£°å±êÇ©½«±»Ìæ»»³Éʲô´æ·ÅÔÚÄ£ÐÍÖС£
ÔÚÄãʵÏÖÊÓͼʱÎÊ×Ô¼º¼¸¸öÎÊÌ⣺“È«ÌåÊÓͼµÄÌæ»»ÈÝÒ×Â𣿔“ʵÏÖÒ»¸öÐÂÊÓͼҪ¶à¾Ã£¿” “ÄܺÜÈÝÒ×µÄÌæ»»ÊÓͼµÄÃèÊöÓïÑÔÂ𣿣¨±ÈÈçÔÚͬһ¸öÊÓͼÖÐÓÃSOAPÎĵµÌæ»»HTMLÎĵµ£©”
Ä£ÐÍ£¨Model£©
Ä£ÐÍ´ú±íÁ˳ÌÐòÂß¼¡££¨ÔÚÆóÒµ¼¶³ÌÐòÖо³£³ÆÎªÒµÎñ²ã£¨business layer£©£©
×ܵÄÀ´Ëµ£¬Ä£Ð͵ÄÈÎÎñÊǰÑÔÓÐÊý¾Ýת»»³É°üº¬Ä³Ð©ÒâÒåµÄÊý¾Ý£¬ÕâЩÊý¾Ý½«±»ÊÓͼËùÏÔʾ¡£Í¨³££¬Ä£Ðͽ«·â×°Êý¾Ý²éѯ£¬¿ÉÄÜͨ¹ýһЩ³éÏóÊý¾ÝÀࣨÊý¾Ý·ÃÎʲ㣩À´ÊµÏÖ²éѯ¡£¾ÙÀý˵£¬ÄãÏ£Íû¼ÆËãÓ¢¹úÄê¶È½µÓêÁ¿£¨Ö»ÊÇΪÁ˸øÄã×Ô¼ºÕÒ¸öºÃµãµÄ¶È¼ÙµØ£©£¬Ä£Ðͽ«½ÓÊÕÊ®ÄêÖÐÿÌìµÄ½µÓêÁ¿£¬¼ÆËã³öƽ¾ùÖµ£¬ÔÙ´«µÝ¸øÊÓͼ¡£
¿ØÖÆÆ÷£¨controller£©
¼òµ¥µÄ˵¿ØÖÆÆ÷ÊÇWebÓ¦ÓÃÖнøÈëµÄHTTPÇëÇó×îÏȵ÷ÓõÄÒ»²¿·Ö¡£Ëü¼ì²éÊÕµ½µÄÇëÇ󣬱ÈÈçһЩGET±äÁ¿£¬×ö³öºÏÊʵķ´À¡¡£ÔÚд³öÄãµÄµÚÒ»¸ö¿ØÖÆÆ÷֮ǰ£¬ÄãºÜÄÑ¿ªÊ¼±àдÆäËûµÄPHP´úÂë¡£×î³£¼ûµÄÓ÷¨ÊÇindex.phpÖÐÏñswitchÓï¾äµÄ½á¹¹£º
<?php switch (MVCģʽÔÚÍøÕ¾¼Ü¹¹ÖÐÊ®·Ö³£¼û¡£ËüÔÊÐíÎÒÃǽ¨Á¢Ò»¸öÈý²ã½á¹¹µÄÓ¦ÓóÌʽ£¬´Ó´úÂëÖзÖÀë³öÓÐÓõIJ㣬°ïÖúÉè¼ÆÊ¦ºÍ¿ª·¢ÕßÐͬ¹¤×÷ÒÔ¼°Ìá¸ßÎÒÃÇά»¤ºÍÀ©Õ¹¼ÈÓгÌʽµÄÄÜÁ¦¡£
ÊÓͼ£¨View£©
“ÊÓͼ”Ö÷ÒªÖ¸ÎÒÃÇË͵½Webä¯ÀÀÆ÷µÄ×îÖÕ½á¹û??±ÈÈçÎÒÃǵĽű¾Éú³ÉµÄHTML¡£µ±Ëµµ½ÊÓͼʱ£¬ºÜ¶àÈËÏëµ½µÄÊÇÄ£°æ£¬µ«ÊǰÑÄ£°å·½°¸½Ð×öÊÓͼµÄÕýÈ·ÐÔÊÇÖµµÃ»³Òɵġ£
¶ÔÊÓͼÀ´Ëµ£¬×îÖØÒªµÄÊÂÇé¿ÉÄÜÊÇËüÓ¦¸ÃÊÇ“×ÔÎÒÒâʶ£¨self aware£©”µÄ£¬ÊÓͼ±»äÖȾ£¨render£©Ê±£¬ÊÓͼµÄÔªËØÄÜÒâʶµ½×Ô¼ºÔÚ¸ü´ó¿ò¼ÜÖеĽÇÉ«¡£
ÒÔXMLΪÀý£¬¿ÉÒÔ˵XMLÔÚ±»½âÎöʱ£¬DOM APIÓÐ×ÅÕâÑùµÄÈÏÖª??Ò»¸öDOMÊ÷ÀïµÄ½ÚµãÖªµÀËüÔÚÄÄÀïºÍËü°üº¬ÁËʲô¡£ £¨µ±Ò»¸öXMLÎĵµÖеĽڵãÓÃSAX½âÎöʱֻÓе±½âÎöµ½¸Ã½ÚµãʱËü²ÅÓÐÒâÒå¡££©
¾ø´ó¶àÊýÄ£°å·½°¸Ê¹Óüòµ¥µÄ¹ý³ÌÓïÑÔºÍÕâÑùµÄÄ£°å±êÇ©£º
<p>{some_text}</p> <p>{some_more_text}</p>
ËüÃÇÔÚÎĵµÖÐûÓÐÒâÒ壬ËüÃÇ´ú±íµÄÒâÒåÖ»ÊÇPHP½«ÓÃÆäËûµÄ¶«Î÷À´Ìæ»»Ëü¡£
Èç¹ûÄãͬÒâÕâÖÖ¶ÔÊÓͼµÄËÉÉ¢ÃèÊö£¬ÄãÒ²¾Í»áͬÒâ¾ø´ó¶àÊýÄ£°å·½°¸²¢Ã»ÓÐÓÐЧµÄ·ÖÀëÊÓͼºÍÄ£ÐÍ¡£Ä£°å±êÇ©½«±»Ìæ»»³Éʲô´æ·ÅÔÚÄ£ÐÍÖС£
ÔÚÄãʵÏÖÊÓͼʱÎÊ×Ô¼º¼¸¸öÎÊÌ⣺“È«ÌåÊÓͼµÄÌæ»»ÈÝÒ×Â𣿔“ʵÏÖÒ»¸öÐÂÊÓͼҪ¶à¾Ã£¿” “ÄܺÜÈÝÒ×µÄÌæ»»ÊÓͼµÄÃèÊöÓïÑÔÂ𣿣¨±ÈÈçÔÚͬһ¸öÊÓͼÖÐÓÃSOAPÎĵµÌæ»»HTMLÎĵµ£©”
Ä£ÐÍ£¨Model£©
Ä£ÐÍ´ú±íÁ˳ÌÐòÂß¼¡££¨ÔÚÆóÒµ¼¶³ÌÐòÖо³£³ÆÎªÒµÎñ²ã£¨business layer£©£©
×ܵÄÀ´Ëµ£¬Ä£Ð͵ÄÈÎÎñÊǰÑÔÓÐÊý¾Ýת»»³É°üº¬Ä³Ð©ÒâÒåµÄÊý¾Ý£¬ÕâЩÊý¾Ý½«±»ÊÓͼËùÏÔʾ¡£Í¨³££¬Ä£Ðͽ«·â×°Êý¾Ý²éѯ£¬¿ÉÄÜͨ¹ýһЩ³éÏóÊý¾ÝÀࣨÊý¾Ý·ÃÎʲ㣩À´ÊµÏÖ²éѯ¡£¾ÙÀý˵£¬ÄãÏ£Íû¼ÆËãÓ¢¹úÄê¶È½µÓêÁ¿£¨Ö»ÊÇΪÁ˸øÄã×Ô¼ºÕÒ¸öºÃµãµÄ¶È¼ÙµØ£©£¬Ä£Ðͽ«½ÓÊÕÊ®ÄêÖÐÿÌìµÄ½µÓêÁ¿£¬¼ÆËã³öƽ¾ùÖµ£¬ÔÙ´«µÝ¸øÊÓͼ¡£
¿ØÖÆÆ÷£¨controller£©
¼òµ¥µÄ˵¿ØÖÆÆ÷ÊÇWebÓ¦ÓÃÖнøÈëµÄHTTPÇëÇó×îÏȵ÷ÓõÄÒ»²¿·Ö¡£Ëü¼ì²éÊÕµ½µÄÇëÇ󣬱ÈÈçһЩGET±äÁ¿£¬×ö³öºÏÊʵķ´À¡¡£ÔÚд³öÄãµÄµÚÒ»¸ö¿ØÖÆÆ÷֮ǰ£¬ÄãºÜÄÑ¿ªÊ¼±àдÆäËûµÄPHP´úÂë¡£×î³£¼ûµÄÓ÷¨ÊÇindex.phpÖÐÏñswitchÓï¾äµÄ½á¹¹£º
___FCKpd___1
Õâ¶Î´úÂë»ìÓÃÁËÃæÏò¹ý³ÌºÍ¶ÔÏóµÄ´úÂ룬µ«ÊǶÔÓÚСµÄÕ¾µãÀ´Ëµ£¬Õâͨ³£ÊÇ×îºÃµÄÑ¡Ôñ¡£ËäÈ»ÉϱߵĴúÂ뻹¿ÉÒÔÓÅ»¯¡£
¿ØÖÆÆ÷ʵ¼ÊÉÏÊÇÓÃÀ´´¥·¢Ä£Ð͵ÄÊý¾ÝºÍÊÓÍ¼ÔªËØÖ®¼äµÄ°ó¶¨µÄ¿Ø¼þ¡£
Àý×Ó
ÕâÀïÊÇÒ»¸öʹÓÃMVCģʽµÄ¼òµ¥Àý×Ó¡£
Ê×ÏÈÎÒÃÇÐèÒªÒ»¸öÊý¾Ý¿â·ÃÎÊÀ࣬ËüÊÇÒ»¸öÆÕͨÀà¡£
<?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; } } ?>
ÔÚËüÉϱ߷ÅÉÏÄ£ÐÍ¡£
<?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ÌæÎÒÃDZ£³Ö½á¹û¡£
½ÓÏÂÀ´ÊÇÊÓͼ??ÎÒÈ¥µôÁË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 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ģʽµÄ¼òµ¥Àý×Ó¡£
Ê×ÏÈÎÒÃÇÐèÒªÒ»¸öÊý¾Ý¿â·ÃÎÊÀ࣬ËüÊÇÒ»¸öÆÕͨÀà¡£
___FCKpd___2
ÔÚËüÉϱ߷ÅÉÏÄ£ÐÍ¡£
___FCKpd___3
ÓÐÒ»µãҪעÒâµÄÊÇ£¬ÔÚÄ£ÐͺÍÊý¾Ý·ÃÎÊÀàÖ®¼ä£¬ËüÃǵĽ»»¥´Ó²»»á¶àÓÚÒ»ÐÐ??ûÓжàÐб»´«ËÍ£¬ÄÇÑù»áºÜ¿ìʹ³ÌʽÂýÏÂÀ´¡£Í¬ÑùµÄ³Ìʽ¶ÔÓÚʹÓÃģʽµÄÀ࣬ËüÖ»ÐèÒªÔÚÄÚ´æÖб£ÁôÒ»ÐУ¨Row£©??ÆäËûµÄ½»¸øÒѱ£´æµÄ²éѯ×ÊÔ´£¨query resource£©??»»¾ä»°Ëµ£¬ÎÒÃÇÈÃMYSQLÌæÎÒÃDZ£³Ö½á¹û¡£
½ÓÏÂÀ´ÊÇÊÓͼ??ÎÒÈ¥µôÁËHTMLÒÔ½ÚÊ¡¿Õ¼ä£¬Äã¿ÉÒԲ鿴ÕâÆªÎÄÕµÄÍêÕû´úÂë¡£
___FCKpd___4
×îºóÊÇ¿ØÖÆÆ÷£¬ÎÒÃǽ«°ÑÊÓͼʵÏÖΪһ¸ö×ÓÀà¡£
___FCKpd___5
Ò»¸ö½¨ÒéÊÇÄã×îºÃ¶¨Òå³ÌÐòURLµÄÃû×Ö¿Õ¼äÐÎʽ£¨namespace£©£¬ÄÇÑùËü»á±È½Ï¹æ·¶±ÈÈ磺
___FCKpd___8
ͨ¹ýËüÎÒÃÇ¿ÉÒÔÕâÑù´¦ÀíÎÒÃǵĿØÖÆÆ÷£º
___FCKpd___9
ÓÐʱºò£¬½¨Á¢¿ØÖÆÆ÷ÊǼþºÜÀ§ÄѵÄÊÂÇ飬±ÈÈçµ±ÄãÔÚ¿ª·¢ËٶȺÍÊÊÓ¦ÐÔÖ®¼äȨºâʱ¡£Ò»¸ö»ñµÃÁé¸ÐµÄºÃÈ¥´¦ÊÇApache group µÄJava Struts£¬ËüµÄ¿ØÖÆÆ÷ÍêÈ«ÊÇÓÉXMLÎĵµ¶¨ÒåµÄ¡£ GET['viewpage']) { case "news": $page=new NewsRenderer; break; case "links": $page=new LinksRenderer; break; default: $page=new HomePageRenderer; break; } $page->display(); ?>
×¢ÒâÕâ²»ÊÇʵÏÖ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,MVCģʽÔÚÍøÕ¾¼Ü¹¹ÖÐÊ®·Ö³£¼û¡£ËüÔÊÐíÎÒÃǽ¨Á¢Ò»¸öÈý²ã½á¹¹µÄÓ¦ÓóÌʽ£¬´Ó´úÂëÖзÖÀë³öÓÐÓõIJ㣬°ïÖúÉè¼ÆÊ¦ºÍ¿ª·¢ÕßÐͬ¹¤×÷ÒÔ¼°Ìá¸ßÎÒÃÇά»¤ºÍÀ©Õ¹¼ÈÓгÌʽµÄÄÜÁ¦¡£
ÊÓͼ£¨View£©
“ÊÓͼ”Ö÷ÒªÖ¸ÎÒÃÇË͵½Webä¯ÀÀÆ÷µÄ×îÖÕ½á¹û??±ÈÈçÎÒÃǵĽű¾Éú³ÉµÄHTML¡£µ±Ëµµ½ÊÓͼʱ£¬ºÜ¶àÈËÏëµ½µÄÊÇÄ£°æ£¬µ«ÊǰÑÄ£°å·½°¸½Ð×öÊÓͼµÄÕýÈ·ÐÔÊÇÖµµÃ»³Òɵġ£
¶ÔÊÓͼÀ´Ëµ£¬×îÖØÒªµÄÊÂÇé¿ÉÄÜÊÇËüÓ¦¸ÃÊÇ“×ÔÎÒÒâʶ£¨self aware£©”µÄ£¬ÊÓͼ±»äÖȾ£¨render£©Ê±£¬ÊÓͼµÄÔªËØÄÜÒâʶµ½×Ô¼ºÔÚ¸ü´ó¿ò¼ÜÖеĽÇÉ«¡£
ÒÔXMLΪÀý£¬¿ÉÒÔ˵XMLÔÚ±»½âÎöʱ£¬DOM APIÓÐ×ÅÕâÑùµÄÈÏÖª??Ò»¸öDOMÊ÷ÀïµÄ½ÚµãÖªµÀËüÔÚÄÄÀïºÍËü°üº¬ÁËʲô¡£ £¨µ±Ò»¸öXMLÎĵµÖеĽڵãÓÃSAX½âÎöʱֻÓе±½âÎöµ½¸Ã½ÚµãʱËü²ÅÓÐÒâÒå¡££©
¾ø´ó¶àÊýÄ£°å·½°¸Ê¹Óüòµ¥µÄ¹ý³ÌÓïÑÔºÍÕâÑùµÄÄ£°å±êÇ©£º
<p>{some_text}</p> <p>{some_more_text}</p>
ËüÃÇÔÚÎĵµÖÐûÓÐÒâÒ壬ËüÃÇ´ú±íµÄÒâÒåÖ»ÊÇPHP½«ÓÃÆäËûµÄ¶«Î÷À´Ìæ»»Ëü¡£
Èç¹ûÄãͬÒâÕâÖÖ¶ÔÊÓͼµÄËÉÉ¢ÃèÊö£¬ÄãÒ²¾Í»áͬÒâ¾ø´ó¶àÊýÄ£°å·½°¸²¢Ã»ÓÐÓÐЧµÄ·ÖÀëÊÓͼºÍÄ£ÐÍ¡£Ä£°å±êÇ©½«±»Ìæ»»³Éʲô´æ·ÅÔÚÄ£ÐÍÖС£
ÔÚÄãʵÏÖÊÓͼʱÎÊ×Ô¼º¼¸¸öÎÊÌ⣺“È«ÌåÊÓͼµÄÌæ»»ÈÝÒ×Â𣿔“ʵÏÖÒ»¸öÐÂÊÓͼҪ¶à¾Ã£¿” “ÄܺÜÈÝÒ×µÄÌæ»»ÊÓͼµÄÃèÊöÓïÑÔÂ𣿣¨±ÈÈçÔÚͬһ¸öÊÓͼÖÐÓÃSOAPÎĵµÌæ»»HTMLÎĵµ£©”
Ä£ÐÍ£¨Model£©
Ä£ÐÍ´ú±íÁ˳ÌÐòÂß¼¡££¨ÔÚÆóÒµ¼¶³ÌÐòÖо³£³ÆÎªÒµÎñ²ã£¨business layer£©£©
×ܵÄÀ´Ëµ£¬Ä£Ð͵ÄÈÎÎñÊǰÑÔÓÐÊý¾Ýת»»³É°üº¬Ä³Ð©ÒâÒåµÄÊý¾Ý£¬ÕâЩÊý¾Ý½«±»ÊÓͼËùÏÔʾ¡£Í¨³££¬Ä£Ðͽ«·â×°Êý¾Ý²éѯ£¬¿ÉÄÜͨ¹ýһЩ³éÏóÊý¾ÝÀࣨÊý¾Ý·ÃÎʲ㣩À´ÊµÏÖ²éѯ¡£¾ÙÀý˵£¬ÄãÏ£Íû¼ÆËãÓ¢¹úÄê¶È½µÓêÁ¿£¨Ö»ÊÇΪÁ˸øÄã×Ô¼ºÕÒ¸öºÃµãµÄ¶È¼ÙµØ£©£¬Ä£Ðͽ«½ÓÊÕÊ®ÄêÖÐÿÌìµÄ½µÓêÁ¿£¬¼ÆËã³öƽ¾ùÖµ£¬ÔÙ´«µÝ¸øÊÓͼ¡£
¿ØÖÆÆ÷£¨controller£©
¼òµ¥µÄ˵¿ØÖÆÆ÷ÊÇWebÓ¦ÓÃÖнøÈëµÄHTTPÇëÇó×îÏȵ÷ÓõÄÒ»²¿·Ö¡£Ëü¼ì²éÊÕµ½µÄÇëÇ󣬱ÈÈçһЩGET±äÁ¿£¬×ö³öºÏÊʵķ´À¡¡£ÔÚд³öÄãµÄµÚÒ»¸ö¿ØÖÆÆ÷֮ǰ£¬ÄãºÜÄÑ¿ªÊ¼±àдÆäËûµÄPHP´úÂë¡£×î³£¼ûµÄÓ÷¨ÊÇindex.phpÖÐÏñswitchÓï¾äµÄ½á¹¹£º
<?php switch (MVCģʽÔÚÍøÕ¾¼Ü¹¹ÖÐÊ®·Ö³£¼û¡£ËüÔÊÐíÎÒÃǽ¨Á¢Ò»¸öÈý²ã½á¹¹µÄÓ¦ÓóÌʽ£¬´Ó´úÂëÖзÖÀë³öÓÐÓõIJ㣬°ïÖúÉè¼ÆÊ¦ºÍ¿ª·¢ÕßÐͬ¹¤×÷ÒÔ¼°Ìá¸ßÎÒÃÇά»¤ºÍÀ©Õ¹¼ÈÓгÌʽµÄÄÜÁ¦¡£
ÊÓͼ£¨View£©
“ÊÓͼ”Ö÷ÒªÖ¸ÎÒÃÇË͵½Webä¯ÀÀÆ÷µÄ×îÖÕ½á¹û??±ÈÈçÎÒÃǵĽű¾Éú³ÉµÄHTML¡£µ±Ëµµ½ÊÓͼʱ£¬ºÜ¶àÈËÏëµ½µÄÊÇÄ£°æ£¬µ«ÊǰÑÄ£°å·½°¸½Ð×öÊÓͼµÄÕýÈ·ÐÔÊÇÖµµÃ»³Òɵġ£
¶ÔÊÓͼÀ´Ëµ£¬×îÖØÒªµÄÊÂÇé¿ÉÄÜÊÇËüÓ¦¸ÃÊÇ“×ÔÎÒÒâʶ£¨self aware£©”µÄ£¬ÊÓͼ±»äÖȾ£¨render£©Ê±£¬ÊÓͼµÄÔªËØÄÜÒâʶµ½×Ô¼ºÔÚ¸ü´ó¿ò¼ÜÖеĽÇÉ«¡£
ÒÔXMLΪÀý£¬¿ÉÒÔ˵XMLÔÚ±»½âÎöʱ£¬DOM APIÓÐ×ÅÕâÑùµÄÈÏÖª??Ò»¸öDOMÊ÷ÀïµÄ½ÚµãÖªµÀËüÔÚÄÄÀïºÍËü°üº¬ÁËʲô¡£ £¨µ±Ò»¸öXMLÎĵµÖеĽڵãÓÃSAX½âÎöʱֻÓе±½âÎöµ½¸Ã½ÚµãʱËü²ÅÓÐÒâÒå¡££©
¾ø´ó¶àÊýÄ£°å·½°¸Ê¹Óüòµ¥µÄ¹ý³ÌÓïÑÔºÍÕâÑùµÄÄ£°å±êÇ©£º
<p>{some_text}</p> <p>{some_more_text}</p>
ËüÃÇÔÚÎĵµÖÐûÓÐÒâÒ壬ËüÃÇ´ú±íµÄÒâÒåÖ»ÊÇPHP½«ÓÃÆäËûµÄ¶«Î÷À´Ìæ»»Ëü¡£
Èç¹ûÄãͬÒâÕâÖÖ¶ÔÊÓͼµÄËÉÉ¢ÃèÊö£¬ÄãÒ²¾Í»áͬÒâ¾ø´ó¶àÊýÄ£°å·½°¸²¢Ã»ÓÐÓÐЧµÄ·ÖÀëÊÓͼºÍÄ£ÐÍ¡£Ä£°å±êÇ©½«±»Ìæ»»³Éʲô´æ·ÅÔÚÄ£ÐÍÖС£
ÔÚÄãʵÏÖÊÓͼʱÎÊ×Ô¼º¼¸¸öÎÊÌ⣺“È«ÌåÊÓͼµÄÌæ»»ÈÝÒ×Â𣿔“ʵÏÖÒ»¸öÐÂÊÓͼҪ¶à¾Ã£¿” “ÄܺÜÈÝÒ×µÄÌæ»»ÊÓͼµÄÃèÊöÓïÑÔÂ𣿣¨±ÈÈçÔÚͬһ¸öÊÓͼÖÐÓÃSOAPÎĵµÌæ»»HTMLÎĵµ£©”
Ä£ÐÍ£¨Model£©
Ä£ÐÍ´ú±íÁ˳ÌÐòÂß¼¡££¨ÔÚÆóÒµ¼¶³ÌÐòÖо³£³ÆÎªÒµÎñ²ã£¨business layer£©£©
×ܵÄÀ´Ëµ£¬Ä£Ð͵ÄÈÎÎñÊǰÑÔÓÐÊý¾Ýת»»³É°üº¬Ä³Ð©ÒâÒåµÄÊý¾Ý£¬ÕâЩÊý¾Ý½«±»ÊÓͼËùÏÔʾ¡£Í¨³££¬Ä£Ðͽ«·â×°Êý¾Ý²éѯ£¬¿ÉÄÜͨ¹ýһЩ³éÏóÊý¾ÝÀࣨÊý¾Ý·ÃÎʲ㣩À´ÊµÏÖ²éѯ¡£¾ÙÀý˵£¬ÄãÏ£Íû¼ÆËãÓ¢¹úÄê¶È½µÓêÁ¿£¨Ö»ÊÇΪÁ˸øÄã×Ô¼ºÕÒ¸öºÃµãµÄ¶È¼ÙµØ£©£¬Ä£Ðͽ«½ÓÊÕÊ®ÄêÖÐÿÌìµÄ½µÓêÁ¿£¬¼ÆËã³öƽ¾ùÖµ£¬ÔÙ´«µÝ¸øÊÓͼ¡£
¿ØÖÆÆ÷£¨controller£©
¼òµ¥µÄ˵¿ØÖÆÆ÷ÊÇWebÓ¦ÓÃÖнøÈëµÄHTTPÇëÇó×îÏȵ÷ÓõÄÒ»²¿·Ö¡£Ëü¼ì²éÊÕµ½µÄÇëÇ󣬱ÈÈçһЩGET±äÁ¿£¬×ö³öºÏÊʵķ´À¡¡£ÔÚд³öÄãµÄµÚÒ»¸ö¿ØÖÆÆ÷֮ǰ£¬ÄãºÜÄÑ¿ªÊ¼±àдÆäËûµÄPHP´úÂë¡£×î³£¼ûµÄÓ÷¨ÊÇindex.phpÖÐÏñswitchÓï¾äµÄ½á¹¹£º
___FCKpd___1
Õâ¶Î´úÂë»ìÓÃÁËÃæÏò¹ý³ÌºÍ¶ÔÏóµÄ´úÂ룬µ«ÊǶÔÓÚСµÄÕ¾µãÀ´Ëµ£¬Õâͨ³£ÊÇ×îºÃµÄÑ¡Ôñ¡£ËäÈ»ÉϱߵĴúÂ뻹¿ÉÒÔÓÅ»¯¡£
¿ØÖÆÆ÷ʵ¼ÊÉÏÊÇÓÃÀ´´¥·¢Ä£Ð͵ÄÊý¾ÝºÍÊÓÍ¼ÔªËØÖ®¼äµÄ°ó¶¨µÄ¿Ø¼þ¡£
Àý×Ó
ÕâÀïÊÇÒ»¸öʹÓÃMVCģʽµÄ¼òµ¥Àý×Ó¡£
Ê×ÏÈÎÒÃÇÐèÒªÒ»¸öÊý¾Ý¿â·ÃÎÊÀ࣬ËüÊÇÒ»¸öÆÕͨÀà¡£
<?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; } } ?>
ÔÚËüÉϱ߷ÅÉÏÄ£ÐÍ¡£
<?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ÌæÎÒÃDZ£³Ö½á¹û¡£
½ÓÏÂÀ´ÊÇÊÓͼ??ÎÒÈ¥µôÁË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 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ģʽµÄ¼òµ¥Àý×Ó¡£
Ê×ÏÈÎÒÃÇÐèÒªÒ»¸öÊý¾Ý¿â·ÃÎÊÀ࣬ËüÊÇÒ»¸öÆÕͨÀà¡£
___FCKpd___2
ÔÚËüÉϱ߷ÅÉÏÄ£ÐÍ¡£
___FCKpd___3
ÓÐÒ»µãҪעÒâµÄÊÇ£¬ÔÚÄ£ÐͺÍÊý¾Ý·ÃÎÊÀàÖ®¼ä£¬ËüÃǵĽ»»¥´Ó²»»á¶àÓÚÒ»ÐÐ??ûÓжàÐб»´«ËÍ£¬ÄÇÑù»áºÜ¿ìʹ³ÌʽÂýÏÂÀ´¡£Í¬ÑùµÄ³Ìʽ¶ÔÓÚʹÓÃģʽµÄÀ࣬ËüÖ»ÐèÒªÔÚÄÚ´æÖб£ÁôÒ»ÐУ¨Row£©??ÆäËûµÄ½»¸øÒѱ£´æµÄ²éѯ×ÊÔ´£¨query resource£©??»»¾ä»°Ëµ£¬ÎÒÃÇÈÃMYSQLÌæÎÒÃDZ£³Ö½á¹û¡£
½ÓÏÂÀ´ÊÇÊÓͼ??ÎÒÈ¥µôÁËHTMLÒÔ½ÚÊ¡¿Õ¼ä£¬Äã¿ÉÒԲ鿴ÕâÆªÎÄÕµÄÍêÕû´úÂë¡£
___FCKpd___4
×îºóÊÇ¿ØÖÆÆ÷£¬ÎÒÃǽ«°ÑÊÓͼʵÏÖΪһ¸ö×ÓÀà¡£
___FCKpd___5
ƯÁÁ¶ø¼òµ¥¡£
ÎÒÃÇÓÐһЩʹÓÿØÖÆÆ÷µÄ¼¼ÇÉ£¬ÔÚPHPÖÐÄã¿ÉÒÔÕâÑù×ö£º
___FCKpd___7
Ò»¸ö½¨ÒéÊÇÄã×îºÃ¶¨Òå³ÌÐòURLµÄÃû×Ö¿Õ¼äÐÎʽ£¨namespace£©£¬ÄÇÑùËü»á±È½Ï¹æ·¶±ÈÈ磺
___FCKpd___8
ͨ¹ýËüÎÒÃÇ¿ÉÒÔÕâÑù´¦ÀíÎÒÃǵĿØÖÆÆ÷£º
___FCKpd___9
ÓÐʱºò£¬½¨Á¢¿ØÖÆÆ÷ÊǼþºÜÀ§ÄѵÄÊÂÇ飬±ÈÈçµ±ÄãÔÚ¿ª·¢ËٶȺÍÊÊÓ¦ÐÔÖ®¼äȨºâʱ¡£Ò»¸ö»ñµÃÁé¸ÐµÄºÃÈ¥´¦ÊÇApache group µÄJava Struts£¬ËüµÄ¿ØÖÆÆ÷ÍêÈ«ÊÇÓÉXMLÎĵµ¶¨ÒåµÄ¡£ GET['viewpage']) { case "news": $page=new NewsRenderer; break; case "links": $page=new LinksRenderer; break; default: $page=new HomePageRenderer; break; } $page->display(); ?>
×¢ÒâÕâ²»ÊÇʵÏÖMVCµÄΨһ·½Ê½??±ÈÈçÄã¿ÉÒÔÓÿØÖÆÆ÷ʵÏÖÄ£ÐÍͬʱÕûºÏÊÓͼ¡£ÕâÖ»ÊÇÑÝʾģʽµÄÒ»ÖÖ·½·¨¡£
ÎÒÃǵÄindex.php Îļþ¿´ÆðÀ´ÏñÕâÑù£º
___FCKpd___6
ƯÁÁ¶ø¼òµ¥¡£
ÎÒÃÇÓÐһЩʹÓÿØÖÆÆ÷µÄ¼¼ÇÉ£¬ÔÚPHPÖÐÄã¿ÉÒÔÕâÑù×ö£º
___FCKpd___7
Ò»¸ö½¨ÒéÊÇÄã×îºÃ¶¨Òå³ÌÐòURLµÄÃû×Ö¿Õ¼äÐÎʽ£¨namespace£©£¬ÄÇÑùËü»á±È½Ï¹æ·¶±ÈÈ磺
"index.php?class=ProductView&method=productItem&id=4"
ͨ¹ýËüÎÒÃÇ¿ÉÒÔÕâÑù´¦ÀíÎÒÃǵĿØÖÆÆ÷£º
$view=newMVCģʽÔÚÍøÕ¾¼Ü¹¹ÖÐÊ®·Ö³£¼û¡£ËüÔÊÐíÎÒÃǽ¨Á¢Ò»¸öÈý²ã½á¹¹µÄÓ¦ÓóÌʽ£¬´Ó´úÂëÖзÖÀë³öÓÐÓõIJ㣬°ïÖúÉè¼ÆÊ¦ºÍ¿ª·¢ÕßÐͬ¹¤×÷ÒÔ¼°Ìá¸ßÎÒÃÇά»¤ºÍÀ©Õ¹¼ÈÓгÌʽµÄÄÜÁ¦¡£
ÊÓͼ£¨View£©
“ÊÓͼ”Ö÷ÒªÖ¸ÎÒÃÇË͵½Webä¯ÀÀÆ÷µÄ×îÖÕ½á¹û??±ÈÈçÎÒÃǵĽű¾Éú³ÉµÄHTML¡£µ±Ëµµ½ÊÓͼʱ£¬ºÜ¶àÈËÏëµ½µÄÊÇÄ£°æ£¬µ«ÊǰÑÄ£°å·½°¸½Ð×öÊÓͼµÄÕýÈ·ÐÔÊÇÖµµÃ»³Òɵġ£
¶ÔÊÓͼÀ´Ëµ£¬×îÖØÒªµÄÊÂÇé¿ÉÄÜÊÇËüÓ¦¸ÃÊÇ“×ÔÎÒÒâʶ£¨self aware£©”µÄ£¬ÊÓͼ±»äÖȾ£¨render£©Ê±£¬ÊÓͼµÄÔªËØÄÜÒâʶµ½×Ô¼ºÔÚ¸ü´ó¿ò¼ÜÖеĽÇÉ«¡£
ÒÔXMLΪÀý£¬¿ÉÒÔ˵XMLÔÚ±»½âÎöʱ£¬DOM APIÓÐ×ÅÕâÑùµÄÈÏÖª??Ò»¸öDOMÊ÷ÀïµÄ½ÚµãÖªµÀËüÔÚÄÄÀïºÍËü°üº¬ÁËʲô¡£ £¨µ±Ò»¸öXMLÎĵµÖеĽڵãÓÃSAX½âÎöʱֻÓе±½âÎöµ½¸Ã½ÚµãʱËü²ÅÓÐÒâÒå¡££©
¾ø´ó¶àÊýÄ£°å·½°¸Ê¹Óüòµ¥µÄ¹ý³ÌÓïÑÔºÍÕâÑùµÄÄ£°å±êÇ©£º
<p>{some_text}</p> <p>{some_more_text}</p>
ËüÃÇÔÚÎĵµÖÐûÓÐÒâÒ壬ËüÃÇ´ú±íµÄÒâÒåÖ»ÊÇPHP½«ÓÃÆäËûµÄ¶«Î÷À´Ìæ»»Ëü¡£
Èç¹ûÄãͬÒâÕâÖÖ¶ÔÊÓͼµÄËÉÉ¢ÃèÊö£¬ÄãÒ²¾Í»áͬÒâ¾ø´ó¶àÊýÄ£°å·½°¸²¢Ã»ÓÐÓÐЧµÄ·ÖÀëÊÓͼºÍÄ£ÐÍ¡£Ä£°å±êÇ©½«±»Ìæ»»³Éʲô´æ·ÅÔÚÄ£ÐÍÖС£
ÔÚÄãʵÏÖÊÓͼʱÎÊ×Ô¼º¼¸¸öÎÊÌ⣺“È«ÌåÊÓͼµÄÌæ»»ÈÝÒ×Â𣿔“ʵÏÖÒ»¸öÐÂÊÓͼҪ¶à¾Ã£¿” “ÄܺÜÈÝÒ×µÄÌæ»»ÊÓͼµÄÃèÊöÓïÑÔÂ𣿣¨±ÈÈçÔÚͬһ¸öÊÓͼÖÐÓÃSOAPÎĵµÌæ»»HTMLÎĵµ£©”
Ä£ÐÍ£¨Model£©
Ä£ÐÍ´ú±íÁ˳ÌÐòÂß¼¡££¨ÔÚÆóÒµ¼¶³ÌÐòÖо³£³ÆÎªÒµÎñ²ã£¨business layer£©£©
×ܵÄÀ´Ëµ£¬Ä£Ð͵ÄÈÎÎñÊǰÑÔÓÐÊý¾Ýת»»³É°üº¬Ä³Ð©ÒâÒåµÄÊý¾Ý£¬ÕâЩÊý¾Ý½«±»ÊÓͼËùÏÔʾ¡£Í¨³££¬Ä£Ðͽ«·â×°Êý¾Ý²éѯ£¬¿ÉÄÜͨ¹ýһЩ³éÏóÊý¾ÝÀࣨÊý¾Ý·ÃÎʲ㣩À´ÊµÏÖ²éѯ¡£¾ÙÀý˵£¬ÄãÏ£Íû¼ÆËãÓ¢¹úÄê¶È½µÓêÁ¿£¨Ö»ÊÇΪÁ˸øÄã×Ô¼ºÕÒ¸öºÃµãµÄ¶È¼ÙµØ£©£¬Ä£Ðͽ«½ÓÊÕÊ®ÄêÖÐÿÌìµÄ½µÓêÁ¿£¬¼ÆËã³öƽ¾ùÖµ£¬ÔÙ´«µÝ¸øÊÓͼ¡£
¿ØÖÆÆ÷£¨controller£©
¼òµ¥µÄ˵¿ØÖÆÆ÷ÊÇWebÓ¦ÓÃÖнøÈëµÄHTTPÇëÇó×îÏȵ÷ÓõÄÒ»²¿·Ö¡£Ëü¼ì²éÊÕµ½µÄÇëÇ󣬱ÈÈçһЩGET±äÁ¿£¬×ö³öºÏÊʵķ´À¡¡£ÔÚд³öÄãµÄµÚÒ»¸ö¿ØÖÆÆ÷֮ǰ£¬ÄãºÜÄÑ¿ªÊ¼±àдÆäËûµÄPHP´úÂë¡£×î³£¼ûµÄÓ÷¨ÊÇindex.phpÖÐÏñswitchÓï¾äµÄ½á¹¹£º
<?php switch (MVCģʽÔÚÍøÕ¾¼Ü¹¹ÖÐÊ®·Ö³£¼û¡£ËüÔÊÐíÎÒÃǽ¨Á¢Ò»¸öÈý²ã½á¹¹µÄÓ¦ÓóÌʽ£¬´Ó´úÂëÖзÖÀë³öÓÐÓõIJ㣬°ïÖúÉè¼ÆÊ¦ºÍ¿ª·¢ÕßÐͬ¹¤×÷ÒÔ¼°Ìá¸ßÎÒÃÇά»¤ºÍÀ©Õ¹¼ÈÓгÌʽµÄÄÜÁ¦¡£
ÊÓͼ£¨View£©
“ÊÓͼ”Ö÷ÒªÖ¸ÎÒÃÇË͵½Webä¯ÀÀÆ÷µÄ×îÖÕ½á¹û??±ÈÈçÎÒÃǵĽű¾Éú³ÉµÄHTML¡£µ±Ëµµ½ÊÓͼʱ£¬ºÜ¶àÈËÏëµ½µÄÊÇÄ£°æ£¬µ«ÊǰÑÄ£°å·½°¸½Ð×öÊÓͼµÄÕýÈ·ÐÔÊÇÖµµÃ»³Òɵġ£
¶ÔÊÓͼÀ´Ëµ£¬×îÖØÒªµÄÊÂÇé¿ÉÄÜÊÇËüÓ¦¸ÃÊÇ“×ÔÎÒÒâʶ£¨self aware£©”µÄ£¬ÊÓͼ±»äÖȾ£¨render£©Ê±£¬ÊÓͼµÄÔªËØÄÜÒâʶµ½×Ô¼ºÔÚ¸ü´ó¿ò¼ÜÖеĽÇÉ«¡£
ÒÔXMLΪÀý£¬¿ÉÒÔ˵XMLÔÚ±»½âÎöʱ£¬DOM APIÓÐ×ÅÕâÑùµÄÈÏÖª??Ò»¸öDOMÊ÷ÀïµÄ½ÚµãÖªµÀËüÔÚÄÄÀïºÍËü°üº¬ÁËʲô¡£ £¨µ±Ò»¸öXMLÎĵµÖеĽڵãÓÃSAX½âÎöʱֻÓе±½âÎöµ½¸Ã½ÚµãʱËü²ÅÓÐÒâÒå¡££©
¾ø´ó¶àÊýÄ£°å·½°¸Ê¹Óüòµ¥µÄ¹ý³ÌÓïÑÔºÍÕâÑùµÄÄ£°å±êÇ©£º
<p>{some_text}</p> <p>{some_more_text}</p>
ËüÃÇÔÚÎĵµÖÐûÓÐÒâÒ壬ËüÃÇ´ú±íµÄÒâÒåÖ»ÊÇPHP½«ÓÃÆäËûµÄ¶«Î÷À´Ìæ»»Ëü¡£
Èç¹ûÄãͬÒâÕâÖÖ¶ÔÊÓͼµÄËÉÉ¢ÃèÊö£¬ÄãÒ²¾Í»áͬÒâ¾ø´ó¶àÊýÄ£°å·½°¸²¢Ã»ÓÐÓÐЧµÄ·ÖÀëÊÓͼºÍÄ£ÐÍ¡£Ä£°å±êÇ©½«±»Ìæ»»³Éʲô´æ·ÅÔÚÄ£ÐÍÖС£
ÔÚÄãʵÏÖÊÓͼʱÎÊ×Ô¼º¼¸¸öÎÊÌ⣺“È«ÌåÊÓͼµÄÌæ»»ÈÝÒ×Â𣿔“ʵÏÖÒ»¸öÐÂÊÓͼҪ¶à¾Ã£¿” “ÄܺÜÈÝÒ×µÄÌæ»»ÊÓͼµÄÃèÊöÓïÑÔÂ𣿣¨±ÈÈçÔÚͬһ¸öÊÓͼÖÐÓÃSOAPÎĵµÌæ»»HTMLÎĵµ£©”
Ä£ÐÍ£¨Model£©
Ä£ÐÍ´ú±íÁ˳ÌÐòÂß¼¡££¨ÔÚÆóÒµ¼¶³ÌÐòÖо³£³ÆÎªÒµÎñ²ã£¨business layer£©£©
×ܵÄÀ´Ëµ£¬Ä£Ð͵ÄÈÎÎñÊǰÑÔÓÐÊý¾Ýת»»³É°üº¬Ä³Ð©ÒâÒåµÄÊý¾Ý£¬ÕâЩÊý¾Ý½«±»ÊÓͼËùÏÔʾ¡£Í¨³££¬Ä£Ðͽ«·â×°Êý¾Ý²éѯ£¬¿ÉÄÜͨ¹ýһЩ³éÏóÊý¾ÝÀࣨÊý¾Ý·ÃÎʲ㣩À´ÊµÏÖ²éѯ¡£¾ÙÀý˵£¬ÄãÏ£Íû¼ÆËãÓ¢¹úÄê¶È½µÓêÁ¿£¨Ö»ÊÇΪÁ˸øÄã×Ô¼ºÕÒ¸öºÃµãµÄ¶È¼ÙµØ£©£¬Ä£Ðͽ«½ÓÊÕÊ®ÄêÖÐÿÌìµÄ½µÓêÁ¿£¬¼ÆËã³öƽ¾ùÖµ£¬ÔÙ´«µÝ¸øÊÓͼ¡£
¿ØÖÆÆ÷£¨controller£©
¼òµ¥µÄ˵¿ØÖÆÆ÷ÊÇWebÓ¦ÓÃÖнøÈëµÄHTTPÇëÇó×îÏȵ÷ÓõÄÒ»²¿·Ö¡£Ëü¼ì²éÊÕµ½µÄÇëÇ󣬱ÈÈçһЩGET±äÁ¿£¬×ö³öºÏÊʵķ´À¡¡£ÔÚд³öÄãµÄµÚÒ»¸ö¿ØÖÆÆ÷֮ǰ£¬ÄãºÜÄÑ¿ªÊ¼±àдÆäËûµÄPHP´úÂë¡£×î³£¼ûµÄÓ÷¨ÊÇindex.phpÖÐÏñswitchÓï¾äµÄ½á¹¹£º
___FCKpd___1
Õâ¶Î´úÂë»ìÓÃÁËÃæÏò¹ý³ÌºÍ¶ÔÏóµÄ´úÂ룬µ«ÊǶÔÓÚСµÄÕ¾µãÀ´Ëµ£¬Õâͨ³£ÊÇ×îºÃµÄÑ¡Ôñ¡£ËäÈ»ÉϱߵĴúÂ뻹¿ÉÒÔÓÅ»¯¡£
¿ØÖÆÆ÷ʵ¼ÊÉÏÊÇÓÃÀ´´¥·¢Ä£Ð͵ÄÊý¾ÝºÍÊÓÍ¼ÔªËØÖ®¼äµÄ°ó¶¨µÄ¿Ø¼þ¡£
Àý×Ó
ÕâÀïÊÇÒ»¸öʹÓÃMVCģʽµÄ¼òµ¥Àý×Ó¡£
Ê×ÏÈÎÒÃÇÐèÒªÒ»¸öÊý¾Ý¿â·ÃÎÊÀ࣬ËüÊÇÒ»¸öÆÕͨÀà¡£
<?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; } } ?>
ÔÚËüÉϱ߷ÅÉÏÄ£ÐÍ¡£
<?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ÌæÎÒÃDZ£³Ö½á¹û¡£
½ÓÏÂÀ´ÊÇÊÓͼ??ÎÒÈ¥µôÁË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 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ģʽµÄ¼òµ¥Àý×Ó¡£
Ê×ÏÈÎÒÃÇÐèÒªÒ»¸öÊý¾Ý¿â·ÃÎÊÀ࣬ËüÊÇÒ»¸öÆÕͨÀà¡£
___FCKpd___2
ÔÚËüÉϱ߷ÅÉÏÄ£ÐÍ¡£
___FCKpd___3
ÓÐÒ»µãҪעÒâµÄÊÇ£¬ÔÚÄ£ÐͺÍÊý¾Ý·ÃÎÊÀàÖ®¼ä£¬ËüÃǵĽ»»¥´Ó²»»á¶àÓÚÒ»ÐÐ??ûÓжàÐб»´«ËÍ£¬ÄÇÑù»áºÜ¿ìʹ³ÌʽÂýÏÂÀ´¡£Í¬ÑùµÄ³Ìʽ¶ÔÓÚʹÓÃģʽµÄÀ࣬ËüÖ»ÐèÒªÔÚÄÚ´æÖб£ÁôÒ»ÐУ¨Row£©??ÆäËûµÄ½»¸øÒѱ£´æµÄ²éѯ×ÊÔ´£¨query resource£©??»»¾ä»°Ëµ£¬ÎÒÃÇÈÃMYSQLÌæÎÒÃDZ£³Ö½á¹û¡£
½ÓÏÂÀ´ÊÇÊÓͼ??ÎÒÈ¥µôÁËHTMLÒÔ½ÚÊ¡¿Õ¼ä£¬Äã¿ÉÒԲ鿴ÕâÆªÎÄÕµÄÍêÕû´úÂë¡£
___FCKpd___4
×îºóÊÇ¿ØÖÆÆ÷£¬ÎÒÃǽ«°ÑÊÓͼʵÏÖΪһ¸ö×ÓÀà¡£
___FCKpd___5
ÓÐʱºò£¬½¨Á¢¿ØÖÆÆ÷ÊǼþºÜÀ§ÄѵÄÊÂÇ飬±ÈÈçµ±ÄãÔÚ¿ª·¢ËٶȺÍÊÊÓ¦ÐÔÖ®¼äȨºâʱ¡£Ò»¸ö»ñµÃÁé¸ÐµÄºÃÈ¥´¦ÊÇApache group µÄJava Struts£¬ËüµÄ¿ØÖÆÆ÷ÍêÈ«ÊÇÓÉXMLÎĵµ¶¨ÒåµÄ¡£ GET['viewpage']) { case "news": $page=new NewsRenderer; break; case "links": $page=new LinksRenderer; break; default: $page=new HomePageRenderer; break; } $page->display(); ?>
×¢ÒâÕâ²»ÊÇʵÏÖ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,MVCģʽÔÚÍøÕ¾¼Ü¹¹ÖÐÊ®·Ö³£¼û¡£ËüÔÊÐíÎÒÃǽ¨Á¢Ò»¸öÈý²ã½á¹¹µÄÓ¦ÓóÌʽ£¬´Ó´úÂëÖзÖÀë³öÓÐÓõIJ㣬°ïÖúÉè¼ÆÊ¦ºÍ¿ª·¢ÕßÐͬ¹¤×÷ÒÔ¼°Ìá¸ßÎÒÃÇά»¤ºÍÀ©Õ¹¼ÈÓгÌʽµÄÄÜÁ¦¡£
ÊÓͼ£¨View£©
“ÊÓͼ”Ö÷ÒªÖ¸ÎÒÃÇË͵½Webä¯ÀÀÆ÷µÄ×îÖÕ½á¹û??±ÈÈçÎÒÃǵĽű¾Éú³ÉµÄHTML¡£µ±Ëµµ½ÊÓͼʱ£¬ºÜ¶àÈËÏëµ½µÄÊÇÄ£°æ£¬µ«ÊǰÑÄ£°å·½°¸½Ð×öÊÓͼµÄÕýÈ·ÐÔÊÇÖµµÃ»³Òɵġ£
¶ÔÊÓͼÀ´Ëµ£¬×îÖØÒªµÄÊÂÇé¿ÉÄÜÊÇËüÓ¦¸ÃÊÇ“×ÔÎÒÒâʶ£¨self aware£©”µÄ£¬ÊÓͼ±»äÖȾ£¨render£©Ê±£¬ÊÓͼµÄÔªËØÄÜÒâʶµ½×Ô¼ºÔÚ¸ü´ó¿ò¼ÜÖеĽÇÉ«¡£
ÒÔXMLΪÀý£¬¿ÉÒÔ˵XMLÔÚ±»½âÎöʱ£¬DOM APIÓÐ×ÅÕâÑùµÄÈÏÖª??Ò»¸öDOMÊ÷ÀïµÄ½ÚµãÖªµÀËüÔÚÄÄÀïºÍËü°üº¬ÁËʲô¡£ £¨µ±Ò»¸öXMLÎĵµÖеĽڵãÓÃSAX½âÎöʱֻÓе±½âÎöµ½¸Ã½ÚµãʱËü²ÅÓÐÒâÒå¡££©
¾ø´ó¶àÊýÄ£°å·½°¸Ê¹Óüòµ¥µÄ¹ý³ÌÓïÑÔºÍÕâÑùµÄÄ£°å±êÇ©£º
<p>{some_text}</p> <p>{some_more_text}</p>
ËüÃÇÔÚÎĵµÖÐûÓÐÒâÒ壬ËüÃÇ´ú±íµÄÒâÒåÖ»ÊÇPHP½«ÓÃÆäËûµÄ¶«Î÷À´Ìæ»»Ëü¡£
Èç¹ûÄãͬÒâÕâÖÖ¶ÔÊÓͼµÄËÉÉ¢ÃèÊö£¬ÄãÒ²¾Í»áͬÒâ¾ø´ó¶àÊýÄ£°å·½°¸²¢Ã»ÓÐÓÐЧµÄ·ÖÀëÊÓͼºÍÄ£ÐÍ¡£Ä£°å±êÇ©½«±»Ìæ»»³Éʲô´æ·ÅÔÚÄ£ÐÍÖС£
ÔÚÄãʵÏÖÊÓͼʱÎÊ×Ô¼º¼¸¸öÎÊÌ⣺“È«ÌåÊÓͼµÄÌæ»»ÈÝÒ×Â𣿔“ʵÏÖÒ»¸öÐÂÊÓͼҪ¶à¾Ã£¿” “ÄܺÜÈÝÒ×µÄÌæ»»ÊÓͼµÄÃèÊöÓïÑÔÂ𣿣¨±ÈÈçÔÚͬһ¸öÊÓͼÖÐÓÃSOAPÎĵµÌæ»»HTMLÎĵµ£©”
Ä£ÐÍ£¨Model£©
Ä£ÐÍ´ú±íÁ˳ÌÐòÂß¼¡££¨ÔÚÆóÒµ¼¶³ÌÐòÖо³£³ÆÎªÒµÎñ²ã£¨business layer£©£©
×ܵÄÀ´Ëµ£¬Ä£Ð͵ÄÈÎÎñÊǰÑÔÓÐÊý¾Ýת»»³É°üº¬Ä³Ð©ÒâÒåµÄÊý¾Ý£¬ÕâЩÊý¾Ý½«±»ÊÓͼËùÏÔʾ¡£Í¨³££¬Ä£Ðͽ«·â×°Êý¾Ý²éѯ£¬¿ÉÄÜͨ¹ýһЩ³éÏóÊý¾ÝÀࣨÊý¾Ý·ÃÎʲ㣩À´ÊµÏÖ²éѯ¡£¾ÙÀý˵£¬ÄãÏ£Íû¼ÆËãÓ¢¹úÄê¶È½µÓêÁ¿£¨Ö»ÊÇΪÁ˸øÄã×Ô¼ºÕÒ¸öºÃµãµÄ¶È¼ÙµØ£©£¬Ä£Ðͽ«½ÓÊÕÊ®ÄêÖÐÿÌìµÄ½µÓêÁ¿£¬¼ÆËã³öƽ¾ùÖµ£¬ÔÙ´«µÝ¸øÊÓͼ¡£
¿ØÖÆÆ÷£¨controller£©
¼òµ¥µÄ˵¿ØÖÆÆ÷ÊÇWebÓ¦ÓÃÖнøÈëµÄHTTPÇëÇó×îÏȵ÷ÓõÄÒ»²¿·Ö¡£Ëü¼ì²éÊÕµ½µÄÇëÇ󣬱ÈÈçһЩGET±äÁ¿£¬×ö³öºÏÊʵķ´À¡¡£ÔÚд³öÄãµÄµÚÒ»¸ö¿ØÖÆÆ÷֮ǰ£¬ÄãºÜÄÑ¿ªÊ¼±àдÆäËûµÄPHP´úÂë¡£×î³£¼ûµÄÓ÷¨ÊÇindex.phpÖÐÏñswitchÓï¾äµÄ½á¹¹£º
<?php switch (MVCģʽÔÚÍøÕ¾¼Ü¹¹ÖÐÊ®·Ö³£¼û¡£ËüÔÊÐíÎÒÃǽ¨Á¢Ò»¸öÈý²ã½á¹¹µÄÓ¦ÓóÌʽ£¬´Ó´úÂëÖзÖÀë³öÓÐÓõIJ㣬°ïÖúÉè¼ÆÊ¦ºÍ¿ª·¢ÕßÐͬ¹¤×÷ÒÔ¼°Ìá¸ßÎÒÃÇά»¤ºÍÀ©Õ¹¼ÈÓгÌʽµÄÄÜÁ¦¡£
ÊÓͼ£¨View£©
“ÊÓͼ”Ö÷ÒªÖ¸ÎÒÃÇË͵½Webä¯ÀÀÆ÷µÄ×îÖÕ½á¹û??±ÈÈçÎÒÃǵĽű¾Éú³ÉµÄHTML¡£µ±Ëµµ½ÊÓͼʱ£¬ºÜ¶àÈËÏëµ½µÄÊÇÄ£°æ£¬µ«ÊǰÑÄ£°å·½°¸½Ð×öÊÓͼµÄÕýÈ·ÐÔÊÇÖµµÃ»³Òɵġ£
¶ÔÊÓͼÀ´Ëµ£¬×îÖØÒªµÄÊÂÇé¿ÉÄÜÊÇËüÓ¦¸ÃÊÇ“×ÔÎÒÒâʶ£¨self aware£©”µÄ£¬ÊÓͼ±»äÖȾ£¨render£©Ê±£¬ÊÓͼµÄÔªËØÄÜÒâʶµ½×Ô¼ºÔÚ¸ü´ó¿ò¼ÜÖеĽÇÉ«¡£
ÒÔXMLΪÀý£¬¿ÉÒÔ˵XMLÔÚ±»½âÎöʱ£¬DOM APIÓÐ×ÅÕâÑùµÄÈÏÖª??Ò»¸öDOMÊ÷ÀïµÄ½ÚµãÖªµÀËüÔÚÄÄÀïºÍËü°üº¬ÁËʲô¡£ £¨µ±Ò»¸öXMLÎĵµÖеĽڵãÓÃSAX½âÎöʱֻÓе±½âÎöµ½¸Ã½ÚµãʱËü²ÅÓÐÒâÒå¡££©
¾ø´ó¶àÊýÄ£°å·½°¸Ê¹Óüòµ¥µÄ¹ý³ÌÓïÑÔºÍÕâÑùµÄÄ£°å±êÇ©£º
<p>{some_text}</p> <p>{some_more_text}</p>
ËüÃÇÔÚÎĵµÖÐûÓÐÒâÒ壬ËüÃÇ´ú±íµÄÒâÒåÖ»ÊÇPHP½«ÓÃÆäËûµÄ¶«Î÷À´Ìæ»»Ëü¡£
Èç¹ûÄãͬÒâÕâÖÖ¶ÔÊÓͼµÄËÉÉ¢ÃèÊö£¬ÄãÒ²¾Í»áͬÒâ¾ø´ó¶àÊýÄ£°å·½°¸²¢Ã»ÓÐÓÐЧµÄ·ÖÀëÊÓͼºÍÄ£ÐÍ¡£Ä£°å±êÇ©½«±»Ìæ»»³Éʲô´æ·ÅÔÚÄ£ÐÍÖС£
ÔÚÄãʵÏÖÊÓͼʱÎÊ×Ô¼º¼¸¸öÎÊÌ⣺“È«ÌåÊÓͼµÄÌæ»»ÈÝÒ×Â𣿔“ʵÏÖÒ»¸öÐÂÊÓͼҪ¶à¾Ã£¿” “ÄܺÜÈÝÒ×µÄÌæ»»ÊÓͼµÄÃèÊöÓïÑÔÂ𣿣¨±ÈÈçÔÚͬһ¸öÊÓͼÖÐÓÃSOAPÎĵµÌæ»»HTMLÎĵµ£©”
Ä£ÐÍ£¨Model£©
Ä£ÐÍ´ú±íÁ˳ÌÐòÂß¼¡££¨ÔÚÆóÒµ¼¶³ÌÐòÖо³£³ÆÎªÒµÎñ²ã£¨business layer£©£©
×ܵÄÀ´Ëµ£¬Ä£Ð͵ÄÈÎÎñÊǰÑÔÓÐÊý¾Ýת»»³É°üº¬Ä³Ð©ÒâÒåµÄÊý¾Ý£¬ÕâЩÊý¾Ý½«±»ÊÓͼËùÏÔʾ¡£Í¨³££¬Ä£Ðͽ«·â×°Êý¾Ý²éѯ£¬¿ÉÄÜͨ¹ýһЩ³éÏóÊý¾ÝÀࣨÊý¾Ý·ÃÎʲ㣩À´ÊµÏÖ²éѯ¡£¾ÙÀý˵£¬ÄãÏ£Íû¼ÆËãÓ¢¹úÄê¶È½µÓêÁ¿£¨Ö»ÊÇΪÁ˸øÄã×Ô¼ºÕÒ¸öºÃµãµÄ¶È¼ÙµØ£©£¬Ä£Ðͽ«½ÓÊÕÊ®ÄêÖÐÿÌìµÄ½µÓêÁ¿£¬¼ÆËã³öƽ¾ùÖµ£¬ÔÙ´«µÝ¸øÊÓͼ¡£
¿ØÖÆÆ÷£¨controller£©
¼òµ¥µÄ˵¿ØÖÆÆ÷ÊÇWebÓ¦ÓÃÖнøÈëµÄHTTPÇëÇó×îÏȵ÷ÓõÄÒ»²¿·Ö¡£Ëü¼ì²éÊÕµ½µÄÇëÇ󣬱ÈÈçһЩGET±äÁ¿£¬×ö³öºÏÊʵķ´À¡¡£ÔÚд³öÄãµÄµÚÒ»¸ö¿ØÖÆÆ÷֮ǰ£¬ÄãºÜÄÑ¿ªÊ¼±àдÆäËûµÄPHP´úÂë¡£×î³£¼ûµÄÓ÷¨ÊÇindex.phpÖÐÏñswitchÓï¾äµÄ½á¹¹£º
___FCKpd___1
Õâ¶Î´úÂë»ìÓÃÁËÃæÏò¹ý³ÌºÍ¶ÔÏóµÄ´úÂ룬µ«ÊǶÔÓÚСµÄÕ¾µãÀ´Ëµ£¬Õâͨ³£ÊÇ×îºÃµÄÑ¡Ôñ¡£ËäÈ»ÉϱߵĴúÂ뻹¿ÉÒÔÓÅ»¯¡£
¿ØÖÆÆ÷ʵ¼ÊÉÏÊÇÓÃÀ´´¥·¢Ä£Ð͵ÄÊý¾ÝºÍÊÓÍ¼ÔªËØÖ®¼äµÄ°ó¶¨µÄ¿Ø¼þ¡£
Àý×Ó
ÕâÀïÊÇÒ»¸öʹÓÃMVCģʽµÄ¼òµ¥Àý×Ó¡£
Ê×ÏÈÎÒÃÇÐèÒªÒ»¸öÊý¾Ý¿â·ÃÎÊÀ࣬ËüÊÇÒ»¸öÆÕͨÀà¡£
<?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; } } ?>
ÔÚËüÉϱ߷ÅÉÏÄ£ÐÍ¡£
<?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ÌæÎÒÃDZ£³Ö½á¹û¡£
½ÓÏÂÀ´ÊÇÊÓͼ??ÎÒÈ¥µôÁË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 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ģʽµÄ¼òµ¥Àý×Ó¡£
Ê×ÏÈÎÒÃÇÐèÒªÒ»¸öÊý¾Ý¿â·ÃÎÊÀ࣬ËüÊÇÒ»¸öÆÕͨÀà¡£
___FCKpd___2
ÔÚËüÉϱ߷ÅÉÏÄ£ÐÍ¡£
___FCKpd___3
ÓÐÒ»µãҪעÒâµÄÊÇ£¬ÔÚÄ£ÐͺÍÊý¾Ý·ÃÎÊÀàÖ®¼ä£¬ËüÃǵĽ»»¥´Ó²»»á¶àÓÚÒ»ÐÐ??ûÓжàÐб»´«ËÍ£¬ÄÇÑù»áºÜ¿ìʹ³ÌʽÂýÏÂÀ´¡£Í¬ÑùµÄ³Ìʽ¶ÔÓÚʹÓÃģʽµÄÀ࣬ËüÖ»ÐèÒªÔÚÄÚ´æÖб£ÁôÒ»ÐУ¨Row£©??ÆäËûµÄ½»¸øÒѱ£´æµÄ²éѯ×ÊÔ´£¨query resource£©??»»¾ä»°Ëµ£¬ÎÒÃÇÈÃMYSQLÌæÎÒÃDZ£³Ö½á¹û¡£
½ÓÏÂÀ´ÊÇÊÓͼ??ÎÒÈ¥µôÁËHTMLÒÔ½ÚÊ¡¿Õ¼ä£¬Äã¿ÉÒԲ鿴ÕâÆªÎÄÕµÄÍêÕû´úÂë¡£
___FCKpd___4
×îºóÊÇ¿ØÖÆÆ÷£¬ÎÒÃǽ«°ÑÊÓͼʵÏÖΪһ¸ö×ÓÀà¡£
___FCKpd___5
ƯÁÁ¶ø¼òµ¥¡£
ÎÒÃÇÓÐһЩʹÓÿØÖÆÆ÷µÄ¼¼ÇÉ£¬ÔÚPHPÖÐÄã¿ÉÒÔÕâÑù×ö£º
___FCKpd___7
Ò»¸ö½¨ÒéÊÇÄã×îºÃ¶¨Òå³ÌÐòURLµÄÃû×Ö¿Õ¼äÐÎʽ£¨namespace£©£¬ÄÇÑùËü»á±È½Ï¹æ·¶±ÈÈ磺
___FCKpd___8
ͨ¹ýËüÎÒÃÇ¿ÉÒÔÕâÑù´¦ÀíÎÒÃǵĿØÖÆÆ÷£º
___FCKpd___9
ÓÐʱºò£¬½¨Á¢¿ØÖÆÆ÷ÊǼþºÜÀ§ÄѵÄÊÂÇ飬±ÈÈçµ±ÄãÔÚ¿ª·¢ËٶȺÍÊÊÓ¦ÐÔÖ®¼äȨºâʱ¡£Ò»¸ö»ñµÃÁé¸ÐµÄºÃÈ¥´¦ÊÇApache group µÄJava Struts£¬ËüµÄ¿ØÖÆÆ÷ÍêÈ«ÊÇÓÉXMLÎĵµ¶¨ÒåµÄ¡£ GET['viewpage']) { case "news": $page=new NewsRenderer; break; case "links": $page=new LinksRenderer; break; default: $page=new HomePageRenderer; break; } $page->display(); ?>
×¢ÒâÕâ²»ÊÇʵÏÖMVCµÄΨһ·½Ê½??±ÈÈçÄã¿ÉÒÔÓÿØÖÆÆ÷ʵÏÖÄ£ÐÍͬʱÕûºÏÊÓͼ¡£ÕâÖ»ÊÇÑÝʾģʽµÄÒ»ÖÖ·½·¨¡£
ÎÒÃǵÄindex.php Îļþ¿´ÆðÀ´ÏñÕâÑù£º
___FCKpd___6
ƯÁÁ¶ø¼òµ¥¡£
ÎÒÃÇÓÐһЩʹÓÿØÖÆÆ÷µÄ¼¼ÇÉ£¬ÔÚPHPÖÐÄã¿ÉÒÔÕâÑù×ö£º
$this->{MVCģʽÔÚÍøÕ¾¼Ü¹¹ÖÐÊ®·Ö³£¼û¡£ËüÔÊÐíÎÒÃǽ¨Á¢Ò»¸öÈý²ã½á¹¹µÄÓ¦ÓóÌʽ£¬´Ó´úÂëÖзÖÀë³öÓÐÓõIJ㣬°ïÖúÉè¼ÆÊ¦ºÍ¿ª·¢ÕßÐͬ¹¤×÷ÒÔ¼°Ìá¸ßÎÒÃÇά»¤ºÍÀ©Õ¹¼ÈÓгÌʽµÄÄÜÁ¦¡£
ÊÓͼ£¨View£©
“ÊÓͼ”Ö÷ÒªÖ¸ÎÒÃÇË͵½Webä¯ÀÀÆ÷µÄ×îÖÕ½á¹û??±ÈÈçÎÒÃǵĽű¾Éú³ÉµÄHTML¡£µ±Ëµµ½ÊÓͼʱ£¬ºÜ¶àÈËÏëµ½µÄÊÇÄ£°æ£¬µ«ÊǰÑÄ£°å·½°¸½Ð×öÊÓͼµÄÕýÈ·ÐÔÊÇÖµµÃ»³Òɵġ£
¶ÔÊÓͼÀ´Ëµ£¬×îÖØÒªµÄÊÂÇé¿ÉÄÜÊÇËüÓ¦¸ÃÊÇ“×ÔÎÒÒâʶ£¨self aware£©”µÄ£¬ÊÓͼ±»äÖȾ£¨render£©Ê±£¬ÊÓͼµÄÔªËØÄÜÒâʶµ½×Ô¼ºÔÚ¸ü´ó¿ò¼ÜÖеĽÇÉ«¡£
ÒÔXMLΪÀý£¬¿ÉÒÔ˵XMLÔÚ±»½âÎöʱ£¬DOM APIÓÐ×ÅÕâÑùµÄÈÏÖª??Ò»¸öDOMÊ÷ÀïµÄ½ÚµãÖªµÀËüÔÚÄÄÀïºÍËü°üº¬ÁËʲô¡£ £¨µ±Ò»¸öXMLÎĵµÖеĽڵãÓÃSAX½âÎöʱֻÓе±½âÎöµ½¸Ã½ÚµãʱËü²ÅÓÐÒâÒå¡££©
¾ø´ó¶àÊýÄ£°å·½°¸Ê¹Óüòµ¥µÄ¹ý³ÌÓïÑÔºÍÕâÑùµÄÄ£°å±êÇ©£º
<p>{some_text}</p> <p>{some_more_text}</p>
ËüÃÇÔÚÎĵµÖÐûÓÐÒâÒ壬ËüÃÇ´ú±íµÄÒâÒåÖ»ÊÇPHP½«ÓÃÆäËûµÄ¶«Î÷À´Ìæ»»Ëü¡£
Èç¹ûÄãͬÒâÕâÖÖ¶ÔÊÓͼµÄËÉÉ¢ÃèÊö£¬ÄãÒ²¾Í»áͬÒâ¾ø´ó¶àÊýÄ£°å·½°¸²¢Ã»ÓÐÓÐЧµÄ·ÖÀëÊÓͼºÍÄ£ÐÍ¡£Ä£°å±êÇ©½«±»Ìæ»»³Éʲô´æ·ÅÔÚÄ£ÐÍÖС£
ÔÚÄãʵÏÖÊÓͼʱÎÊ×Ô¼º¼¸¸öÎÊÌ⣺“È«ÌåÊÓͼµÄÌæ»»ÈÝÒ×Â𣿔“ʵÏÖÒ»¸öÐÂÊÓͼҪ¶à¾Ã£¿” “ÄܺÜÈÝÒ×µÄÌæ»»ÊÓͼµÄÃèÊöÓïÑÔÂ𣿣¨±ÈÈçÔÚͬһ¸öÊÓͼÖÐÓÃSOAPÎĵµÌæ»»HTMLÎĵµ£©”
Ä£ÐÍ£¨Model£©
Ä£ÐÍ´ú±íÁ˳ÌÐòÂß¼¡££¨ÔÚÆóÒµ¼¶³ÌÐòÖо³£³ÆÎªÒµÎñ²ã£¨business layer£©£©
×ܵÄÀ´Ëµ£¬Ä£Ð͵ÄÈÎÎñÊǰÑÔÓÐÊý¾Ýת»»³É°üº¬Ä³Ð©ÒâÒåµÄÊý¾Ý£¬ÕâЩÊý¾Ý½«±»ÊÓͼËùÏÔʾ¡£Í¨³££¬Ä£Ðͽ«·â×°Êý¾Ý²éѯ£¬¿ÉÄÜͨ¹ýһЩ³éÏóÊý¾ÝÀࣨÊý¾Ý·ÃÎʲ㣩À´ÊµÏÖ²éѯ¡£¾ÙÀý˵£¬ÄãÏ£Íû¼ÆËãÓ¢¹úÄê¶È½µÓêÁ¿£¨Ö»ÊÇΪÁ˸øÄã×Ô¼ºÕÒ¸öºÃµãµÄ¶È¼ÙµØ£©£¬Ä£Ðͽ«½ÓÊÕÊ®ÄêÖÐÿÌìµÄ½µÓêÁ¿£¬¼ÆËã³öƽ¾ùÖµ£¬ÔÙ´«µÝ¸øÊÓͼ¡£
¿ØÖÆÆ÷£¨controller£©
¼òµ¥µÄ˵¿ØÖÆÆ÷ÊÇWebÓ¦ÓÃÖнøÈëµÄHTTPÇëÇó×îÏȵ÷ÓõÄÒ»²¿·Ö¡£Ëü¼ì²éÊÕµ½µÄÇëÇ󣬱ÈÈçһЩGET±äÁ¿£¬×ö³öºÏÊʵķ´À¡¡£ÔÚд³öÄãµÄµÚÒ»¸ö¿ØÖÆÆ÷֮ǰ£¬ÄãºÜÄÑ¿ªÊ¼±àдÆäËûµÄPHP´úÂë¡£×î³£¼ûµÄÓ÷¨ÊÇindex.phpÖÐÏñswitchÓï¾äµÄ½á¹¹£º
<?php switch (MVCģʽÔÚÍøÕ¾¼Ü¹¹ÖÐÊ®·Ö³£¼û¡£ËüÔÊÐíÎÒÃǽ¨Á¢Ò»¸öÈý²ã½á¹¹µÄÓ¦ÓóÌʽ£¬´Ó´úÂëÖзÖÀë³öÓÐÓõIJ㣬°ïÖúÉè¼ÆÊ¦ºÍ¿ª·¢ÕßÐͬ¹¤×÷ÒÔ¼°Ìá¸ßÎÒÃÇά»¤ºÍÀ©Õ¹¼ÈÓгÌʽµÄÄÜÁ¦¡£
ÊÓͼ£¨View£©
“ÊÓͼ”Ö÷ÒªÖ¸ÎÒÃÇË͵½Webä¯ÀÀÆ÷µÄ×îÖÕ½á¹û??±ÈÈçÎÒÃǵĽű¾Éú³ÉµÄHTML¡£µ±Ëµµ½ÊÓͼʱ£¬ºÜ¶àÈËÏëµ½µÄÊÇÄ£°æ£¬µ«ÊǰÑÄ£°å·½°¸½Ð×öÊÓͼµÄÕýÈ·ÐÔÊÇÖµµÃ»³Òɵġ£
¶ÔÊÓͼÀ´Ëµ£¬×îÖØÒªµÄÊÂÇé¿ÉÄÜÊÇËüÓ¦¸ÃÊÇ“×ÔÎÒÒâʶ£¨self aware£©”µÄ£¬ÊÓͼ±»äÖȾ£¨render£©Ê±£¬ÊÓͼµÄÔªËØÄÜÒâʶµ½×Ô¼ºÔÚ¸ü´ó¿ò¼ÜÖеĽÇÉ«¡£
ÒÔXMLΪÀý£¬¿ÉÒÔ˵XMLÔÚ±»½âÎöʱ£¬DOM APIÓÐ×ÅÕâÑùµÄÈÏÖª??Ò»¸öDOMÊ÷ÀïµÄ½ÚµãÖªµÀËüÔÚÄÄÀïºÍËü°üº¬ÁËʲô¡£ £¨µ±Ò»¸öXMLÎĵµÖеĽڵãÓÃSAX½âÎöʱֻÓе±½âÎöµ½¸Ã½ÚµãʱËü²ÅÓÐÒâÒå¡££©
¾ø´ó¶àÊýÄ£°å·½°¸Ê¹Óüòµ¥µÄ¹ý³ÌÓïÑÔºÍÕâÑùµÄÄ£°å±êÇ©£º
<p>{some_text}</p> <p>{some_more_text}</p>
ËüÃÇÔÚÎĵµÖÐûÓÐÒâÒ壬ËüÃÇ´ú±íµÄÒâÒåÖ»ÊÇPHP½«ÓÃÆäËûµÄ¶«Î÷À´Ìæ»»Ëü¡£
Èç¹ûÄãͬÒâÕâÖÖ¶ÔÊÓͼµÄËÉÉ¢ÃèÊö£¬ÄãÒ²¾Í»áͬÒâ¾ø´ó¶àÊýÄ£°å·½°¸²¢Ã»ÓÐÓÐЧµÄ·ÖÀëÊÓͼºÍÄ£ÐÍ¡£Ä£°å±êÇ©½«±»Ìæ»»³Éʲô´æ·ÅÔÚÄ£ÐÍÖС£
ÔÚÄãʵÏÖÊÓͼʱÎÊ×Ô¼º¼¸¸öÎÊÌ⣺“È«ÌåÊÓͼµÄÌæ»»ÈÝÒ×Â𣿔“ʵÏÖÒ»¸öÐÂÊÓͼҪ¶à¾Ã£¿” “ÄܺÜÈÝÒ×µÄÌæ»»ÊÓͼµÄÃèÊöÓïÑÔÂ𣿣¨±ÈÈçÔÚͬһ¸öÊÓͼÖÐÓÃSOAPÎĵµÌæ»»HTMLÎĵµ£©”
Ä£ÐÍ£¨Model£©
Ä£ÐÍ´ú±íÁ˳ÌÐòÂß¼¡££¨ÔÚÆóÒµ¼¶³ÌÐòÖо³£³ÆÎªÒµÎñ²ã£¨business layer£©£©
×ܵÄÀ´Ëµ£¬Ä£Ð͵ÄÈÎÎñÊǰÑÔÓÐÊý¾Ýת»»³É°üº¬Ä³Ð©ÒâÒåµÄÊý¾Ý£¬ÕâЩÊý¾Ý½«±»ÊÓͼËùÏÔʾ¡£Í¨³££¬Ä£Ðͽ«·â×°Êý¾Ý²éѯ£¬¿ÉÄÜͨ¹ýһЩ³éÏóÊý¾ÝÀࣨÊý¾Ý·ÃÎʲ㣩À´ÊµÏÖ²éѯ¡£¾ÙÀý˵£¬ÄãÏ£Íû¼ÆËãÓ¢¹úÄê¶È½µÓêÁ¿£¨Ö»ÊÇΪÁ˸øÄã×Ô¼ºÕÒ¸öºÃµãµÄ¶È¼ÙµØ£©£¬Ä£Ðͽ«½ÓÊÕÊ®ÄêÖÐÿÌìµÄ½µÓêÁ¿£¬¼ÆËã³öƽ¾ùÖµ£¬ÔÙ´«µÝ¸øÊÓͼ¡£
¿ØÖÆÆ÷£¨controller£©
¼òµ¥µÄ˵¿ØÖÆÆ÷ÊÇWebÓ¦ÓÃÖнøÈëµÄHTTPÇëÇó×îÏȵ÷ÓõÄÒ»²¿·Ö¡£Ëü¼ì²éÊÕµ½µÄÇëÇ󣬱ÈÈçһЩGET±äÁ¿£¬×ö³öºÏÊʵķ´À¡¡£ÔÚд³öÄãµÄµÚÒ»¸ö¿ØÖÆÆ÷֮ǰ£¬ÄãºÜÄÑ¿ªÊ¼±àдÆäËûµÄPHP´úÂë¡£×î³£¼ûµÄÓ÷¨ÊÇindex.phpÖÐÏñswitchÓï¾äµÄ½á¹¹£º
___FCKpd___1
Õâ¶Î´úÂë»ìÓÃÁËÃæÏò¹ý³ÌºÍ¶ÔÏóµÄ´úÂ룬µ«ÊǶÔÓÚСµÄÕ¾µãÀ´Ëµ£¬Õâͨ³£ÊÇ×îºÃµÄÑ¡Ôñ¡£ËäÈ»ÉϱߵĴúÂ뻹¿ÉÒÔÓÅ»¯¡£
¿ØÖÆÆ÷ʵ¼ÊÉÏÊÇÓÃÀ´´¥·¢Ä£Ð͵ÄÊý¾ÝºÍÊÓÍ¼ÔªËØÖ®¼äµÄ°ó¶¨µÄ¿Ø¼þ¡£
Àý×Ó
ÕâÀïÊÇÒ»¸öʹÓÃMVCģʽµÄ¼òµ¥Àý×Ó¡£
Ê×ÏÈÎÒÃÇÐèÒªÒ»¸öÊý¾Ý¿â·ÃÎÊÀ࣬ËüÊÇÒ»¸öÆÕͨÀà¡£
<?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; } } ?>
ÔÚËüÉϱ߷ÅÉÏÄ£ÐÍ¡£
<?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ÌæÎÒÃDZ£³Ö½á¹û¡£
½ÓÏÂÀ´ÊÇÊÓͼ??ÎÒÈ¥µôÁË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 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ģʽµÄ¼òµ¥Àý×Ó¡£
Ê×ÏÈÎÒÃÇÐèÒªÒ»¸öÊý¾Ý¿â·ÃÎÊÀ࣬ËüÊÇÒ»¸öÆÕͨÀà¡£
___FCKpd___2
ÔÚËüÉϱ߷ÅÉÏÄ£ÐÍ¡£
___FCKpd___3
ÓÐÒ»µãҪעÒâµÄÊÇ£¬ÔÚÄ£ÐͺÍÊý¾Ý·ÃÎÊÀàÖ®¼ä£¬ËüÃǵĽ»»¥´Ó²»»á¶àÓÚÒ»ÐÐ??ûÓжàÐб»´«ËÍ£¬ÄÇÑù»áºÜ¿ìʹ³ÌʽÂýÏÂÀ´¡£Í¬ÑùµÄ³Ìʽ¶ÔÓÚʹÓÃģʽµÄÀ࣬ËüÖ»ÐèÒªÔÚÄÚ´æÖб£ÁôÒ»ÐУ¨Row£©??ÆäËûµÄ½»¸øÒѱ£´æµÄ²éѯ×ÊÔ´£¨query resource£©??»»¾ä»°Ëµ£¬ÎÒÃÇÈÃMYSQLÌæÎÒÃDZ£³Ö½á¹û¡£
½ÓÏÂÀ´ÊÇÊÓͼ??ÎÒÈ¥µôÁËHTMLÒÔ½ÚÊ¡¿Õ¼ä£¬Äã¿ÉÒԲ鿴ÕâÆªÎÄÕµÄÍêÕû´úÂë¡£
___FCKpd___4
×îºóÊÇ¿ØÖÆÆ÷£¬ÎÒÃǽ«°ÑÊÓͼʵÏÖΪһ¸ö×ÓÀà¡£
___FCKpd___5
Ò»¸ö½¨ÒéÊÇÄã×îºÃ¶¨Òå³ÌÐòURLµÄÃû×Ö¿Õ¼äÐÎʽ£¨namespace£©£¬ÄÇÑùËü»á±È½Ï¹æ·¶±ÈÈ磺
___FCKpd___8
ͨ¹ýËüÎÒÃÇ¿ÉÒÔÕâÑù´¦ÀíÎÒÃǵĿØÖÆÆ÷£º
___FCKpd___9
ÓÐʱºò£¬½¨Á¢¿ØÖÆÆ÷ÊǼþºÜÀ§ÄѵÄÊÂÇ飬±ÈÈçµ±ÄãÔÚ¿ª·¢ËٶȺÍÊÊÓ¦ÐÔÖ®¼äȨºâʱ¡£Ò»¸ö»ñµÃÁé¸ÐµÄºÃÈ¥´¦ÊÇApache group µÄJava Struts£¬ËüµÄ¿ØÖÆÆ÷ÍêÈ«ÊÇÓÉXMLÎĵµ¶¨ÒåµÄ¡£ GET['viewpage']) { case "news": $page=new NewsRenderer; break; case "links": $page=new LinksRenderer; break; default: $page=new HomePageRenderer; break; } $page->display(); ?>
×¢ÒâÕâ²»ÊÇʵÏÖ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,MVCģʽÔÚÍøÕ¾¼Ü¹¹ÖÐÊ®·Ö³£¼û¡£ËüÔÊÐíÎÒÃǽ¨Á¢Ò»¸öÈý²ã½á¹¹µÄÓ¦ÓóÌʽ£¬´Ó´úÂëÖзÖÀë³öÓÐÓõIJ㣬°ïÖúÉè¼ÆÊ¦ºÍ¿ª·¢ÕßÐͬ¹¤×÷ÒÔ¼°Ìá¸ßÎÒÃÇά»¤ºÍÀ©Õ¹¼ÈÓгÌʽµÄÄÜÁ¦¡£
ÊÓͼ£¨View£©
“ÊÓͼ”Ö÷ÒªÖ¸ÎÒÃÇË͵½Webä¯ÀÀÆ÷µÄ×îÖÕ½á¹û??±ÈÈçÎÒÃǵĽű¾Éú³ÉµÄHTML¡£µ±Ëµµ½ÊÓͼʱ£¬ºÜ¶àÈËÏëµ½µÄÊÇÄ£°æ£¬µ«ÊǰÑÄ£°å·½°¸½Ð×öÊÓͼµÄÕýÈ·ÐÔÊÇÖµµÃ»³Òɵġ£
¶ÔÊÓͼÀ´Ëµ£¬×îÖØÒªµÄÊÂÇé¿ÉÄÜÊÇËüÓ¦¸ÃÊÇ“×ÔÎÒÒâʶ£¨self aware£©”µÄ£¬ÊÓͼ±»äÖȾ£¨render£©Ê±£¬ÊÓͼµÄÔªËØÄÜÒâʶµ½×Ô¼ºÔÚ¸ü´ó¿ò¼ÜÖеĽÇÉ«¡£
ÒÔXMLΪÀý£¬¿ÉÒÔ˵XMLÔÚ±»½âÎöʱ£¬DOM APIÓÐ×ÅÕâÑùµÄÈÏÖª??Ò»¸öDOMÊ÷ÀïµÄ½ÚµãÖªµÀËüÔÚÄÄÀïºÍËü°üº¬ÁËʲô¡£ £¨µ±Ò»¸öXMLÎĵµÖеĽڵãÓÃSAX½âÎöʱֻÓе±½âÎöµ½¸Ã½ÚµãʱËü²ÅÓÐÒâÒå¡££©
¾ø´ó¶àÊýÄ£°å·½°¸Ê¹Óüòµ¥µÄ¹ý³ÌÓïÑÔºÍÕâÑùµÄÄ£°å±êÇ©£º
<p>{some_text}</p> <p>{some_more_text}</p>
ËüÃÇÔÚÎĵµÖÐûÓÐÒâÒ壬ËüÃÇ´ú±íµÄÒâÒåÖ»ÊÇPHP½«ÓÃÆäËûµÄ¶«Î÷À´Ìæ»»Ëü¡£
Èç¹ûÄãͬÒâÕâÖÖ¶ÔÊÓͼµÄËÉÉ¢ÃèÊö£¬ÄãÒ²¾Í»áͬÒâ¾ø´ó¶àÊýÄ£°å·½°¸²¢Ã»ÓÐÓÐЧµÄ·ÖÀëÊÓͼºÍÄ£ÐÍ¡£Ä£°å±êÇ©½«±»Ìæ»»³Éʲô´æ·ÅÔÚÄ£ÐÍÖС£
ÔÚÄãʵÏÖÊÓͼʱÎÊ×Ô¼º¼¸¸öÎÊÌ⣺“È«ÌåÊÓͼµÄÌæ»»ÈÝÒ×Â𣿔“ʵÏÖÒ»¸öÐÂÊÓͼҪ¶à¾Ã£¿” “ÄܺÜÈÝÒ×µÄÌæ»»ÊÓͼµÄÃèÊöÓïÑÔÂ𣿣¨±ÈÈçÔÚͬһ¸öÊÓͼÖÐÓÃSOAPÎĵµÌæ»»HTMLÎĵµ£©”
Ä£ÐÍ£¨Model£©
Ä£ÐÍ´ú±íÁ˳ÌÐòÂß¼¡££¨ÔÚÆóÒµ¼¶³ÌÐòÖо³£³ÆÎªÒµÎñ²ã£¨business layer£©£©
×ܵÄÀ´Ëµ£¬Ä£Ð͵ÄÈÎÎñÊǰÑÔÓÐÊý¾Ýת»»³É°üº¬Ä³Ð©ÒâÒåµÄÊý¾Ý£¬ÕâЩÊý¾Ý½«±»ÊÓͼËùÏÔʾ¡£Í¨³££¬Ä£Ðͽ«·â×°Êý¾Ý²éѯ£¬¿ÉÄÜͨ¹ýһЩ³éÏóÊý¾ÝÀࣨÊý¾Ý·ÃÎʲ㣩À´ÊµÏÖ²éѯ¡£¾ÙÀý˵£¬ÄãÏ£Íû¼ÆËãÓ¢¹úÄê¶È½µÓêÁ¿£¨Ö»ÊÇΪÁ˸øÄã×Ô¼ºÕÒ¸öºÃµãµÄ¶È¼ÙµØ£©£¬Ä£Ðͽ«½ÓÊÕÊ®ÄêÖÐÿÌìµÄ½µÓêÁ¿£¬¼ÆËã³öƽ¾ùÖµ£¬ÔÙ´«µÝ¸øÊÓͼ¡£
¿ØÖÆÆ÷£¨controller£©
¼òµ¥µÄ˵¿ØÖÆÆ÷ÊÇWebÓ¦ÓÃÖнøÈëµÄHTTPÇëÇó×îÏȵ÷ÓõÄÒ»²¿·Ö¡£Ëü¼ì²éÊÕµ½µÄÇëÇ󣬱ÈÈçһЩGET±äÁ¿£¬×ö³öºÏÊʵķ´À¡¡£ÔÚд³öÄãµÄµÚÒ»¸ö¿ØÖÆÆ÷֮ǰ£¬ÄãºÜÄÑ¿ªÊ¼±àдÆäËûµÄPHP´úÂë¡£×î³£¼ûµÄÓ÷¨ÊÇindex.phpÖÐÏñswitchÓï¾äµÄ½á¹¹£º
<?php switch (MVCģʽÔÚÍøÕ¾¼Ü¹¹ÖÐÊ®·Ö³£¼û¡£ËüÔÊÐíÎÒÃǽ¨Á¢Ò»¸öÈý²ã½á¹¹µÄÓ¦ÓóÌʽ£¬´Ó´úÂëÖзÖÀë³öÓÐÓõIJ㣬°ïÖúÉè¼ÆÊ¦ºÍ¿ª·¢ÕßÐͬ¹¤×÷ÒÔ¼°Ìá¸ßÎÒÃÇά»¤ºÍÀ©Õ¹¼ÈÓгÌʽµÄÄÜÁ¦¡£
ÊÓͼ£¨View£©
“ÊÓͼ”Ö÷ÒªÖ¸ÎÒÃÇË͵½Webä¯ÀÀÆ÷µÄ×îÖÕ½á¹û??±ÈÈçÎÒÃǵĽű¾Éú³ÉµÄHTML¡£µ±Ëµµ½ÊÓͼʱ£¬ºÜ¶àÈËÏëµ½µÄÊÇÄ£°æ£¬µ«ÊǰÑÄ£°å·½°¸½Ð×öÊÓͼµÄÕýÈ·ÐÔÊÇÖµµÃ»³Òɵġ£
¶ÔÊÓͼÀ´Ëµ£¬×îÖØÒªµÄÊÂÇé¿ÉÄÜÊÇËüÓ¦¸ÃÊÇ“×ÔÎÒÒâʶ£¨self aware£©”µÄ£¬ÊÓͼ±»äÖȾ£¨render£©Ê±£¬ÊÓͼµÄÔªËØÄÜÒâʶµ½×Ô¼ºÔÚ¸ü´ó¿ò¼ÜÖеĽÇÉ«¡£
ÒÔXMLΪÀý£¬¿ÉÒÔ˵XMLÔÚ±»½âÎöʱ£¬DOM APIÓÐ×ÅÕâÑùµÄÈÏÖª??Ò»¸öDOMÊ÷ÀïµÄ½ÚµãÖªµÀËüÔÚÄÄÀïºÍËü°üº¬ÁËʲô¡£ £¨µ±Ò»¸öXMLÎĵµÖеĽڵãÓÃSAX½âÎöʱֻÓе±½âÎöµ½¸Ã½ÚµãʱËü²ÅÓÐÒâÒå¡££©
¾ø´ó¶àÊýÄ£°å·½°¸Ê¹Óüòµ¥µÄ¹ý³ÌÓïÑÔºÍÕâÑùµÄÄ£°å±êÇ©£º
<p>{some_text}</p> <p>{some_more_text}</p>
ËüÃÇÔÚÎĵµÖÐûÓÐÒâÒ壬ËüÃÇ´ú±íµÄÒâÒåÖ»ÊÇPHP½«ÓÃÆäËûµÄ¶«Î÷À´Ìæ»»Ëü¡£
Èç¹ûÄãͬÒâÕâÖÖ¶ÔÊÓͼµÄËÉÉ¢ÃèÊö£¬ÄãÒ²¾Í»áͬÒâ¾ø´ó¶àÊýÄ£°å·½°¸²¢Ã»ÓÐÓÐЧµÄ·ÖÀëÊÓͼºÍÄ£ÐÍ¡£Ä£°å±êÇ©½«±»Ìæ»»³Éʲô´æ·ÅÔÚÄ£ÐÍÖС£
ÔÚÄãʵÏÖÊÓͼʱÎÊ×Ô¼º¼¸¸öÎÊÌ⣺“È«ÌåÊÓͼµÄÌæ»»ÈÝÒ×Â𣿔“ʵÏÖÒ»¸öÐÂÊÓͼҪ¶à¾Ã£¿” “ÄܺÜÈÝÒ×µÄÌæ»»ÊÓͼµÄÃèÊöÓïÑÔÂ𣿣¨±ÈÈçÔÚͬһ¸öÊÓͼÖÐÓÃSOAPÎĵµÌæ»»HTMLÎĵµ£©”
Ä£ÐÍ£¨Model£©
Ä£ÐÍ´ú±íÁ˳ÌÐòÂß¼¡££¨ÔÚÆóÒµ¼¶³ÌÐòÖо³£³ÆÎªÒµÎñ²ã£¨business layer£©£©
×ܵÄÀ´Ëµ£¬Ä£Ð͵ÄÈÎÎñÊǰÑÔÓÐÊý¾Ýת»»³É°üº¬Ä³Ð©ÒâÒåµÄÊý¾Ý£¬ÕâЩÊý¾Ý½«±»ÊÓͼËùÏÔʾ¡£Í¨³££¬Ä£Ðͽ«·â×°Êý¾Ý²éѯ£¬¿ÉÄÜͨ¹ýһЩ³éÏóÊý¾ÝÀࣨÊý¾Ý·ÃÎʲ㣩À´ÊµÏÖ²éѯ¡£¾ÙÀý˵£¬ÄãÏ£Íû¼ÆËãÓ¢¹úÄê¶È½µÓêÁ¿£¨Ö»ÊÇΪÁ˸øÄã×Ô¼ºÕÒ¸öºÃµãµÄ¶È¼ÙµØ£©£¬Ä£Ðͽ«½ÓÊÕÊ®ÄêÖÐÿÌìµÄ½µÓêÁ¿£¬¼ÆËã³öƽ¾ùÖµ£¬ÔÙ´«µÝ¸øÊÓͼ¡£
¿ØÖÆÆ÷£¨controller£©
¼òµ¥µÄ˵¿ØÖÆÆ÷ÊÇWebÓ¦ÓÃÖнøÈëµÄHTTPÇëÇó×îÏȵ÷ÓõÄÒ»²¿·Ö¡£Ëü¼ì²éÊÕµ½µÄÇëÇ󣬱ÈÈçһЩGET±äÁ¿£¬×ö³öºÏÊʵķ´À¡¡£ÔÚд³öÄãµÄµÚÒ»¸ö¿ØÖÆÆ÷֮ǰ£¬ÄãºÜÄÑ¿ªÊ¼±àдÆäËûµÄPHP´úÂë¡£×î³£¼ûµÄÓ÷¨ÊÇindex.phpÖÐÏñswitchÓï¾äµÄ½á¹¹£º
___FCKpd___1
Õâ¶Î´úÂë»ìÓÃÁËÃæÏò¹ý³ÌºÍ¶ÔÏóµÄ´úÂ룬µ«ÊǶÔÓÚСµÄÕ¾µãÀ´Ëµ£¬Õâͨ³£ÊÇ×îºÃµÄÑ¡Ôñ¡£ËäÈ»ÉϱߵĴúÂ뻹¿ÉÒÔÓÅ»¯¡£
¿ØÖÆÆ÷ʵ¼ÊÉÏÊÇÓÃÀ´´¥·¢Ä£Ð͵ÄÊý¾ÝºÍÊÓÍ¼ÔªËØÖ®¼äµÄ°ó¶¨µÄ¿Ø¼þ¡£
Àý×Ó
ÕâÀïÊÇÒ»¸öʹÓÃMVCģʽµÄ¼òµ¥Àý×Ó¡£
Ê×ÏÈÎÒÃÇÐèÒªÒ»¸öÊý¾Ý¿â·ÃÎÊÀ࣬ËüÊÇÒ»¸öÆÕͨÀà¡£
<?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; } } ?>
ÔÚËüÉϱ߷ÅÉÏÄ£ÐÍ¡£
<?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ÌæÎÒÃDZ£³Ö½á¹û¡£
½ÓÏÂÀ´ÊÇÊÓͼ??ÎÒÈ¥µôÁË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 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ģʽµÄ¼òµ¥Àý×Ó¡£
Ê×ÏÈÎÒÃÇÐèÒªÒ»¸öÊý¾Ý¿â·ÃÎÊÀ࣬ËüÊÇÒ»¸öÆÕͨÀà¡£
___FCKpd___2
ÔÚËüÉϱ߷ÅÉÏÄ£ÐÍ¡£
___FCKpd___3
ÓÐÒ»µãҪעÒâµÄÊÇ£¬ÔÚÄ£ÐͺÍÊý¾Ý·ÃÎÊÀàÖ®¼ä£¬ËüÃǵĽ»»¥´Ó²»»á¶àÓÚÒ»ÐÐ??ûÓжàÐб»´«ËÍ£¬ÄÇÑù»áºÜ¿ìʹ³ÌʽÂýÏÂÀ´¡£Í¬ÑùµÄ³Ìʽ¶ÔÓÚʹÓÃģʽµÄÀ࣬ËüÖ»ÐèÒªÔÚÄÚ´æÖб£ÁôÒ»ÐУ¨Row£©??ÆäËûµÄ½»¸øÒѱ£´æµÄ²éѯ×ÊÔ´£¨query resource£©??»»¾ä»°Ëµ£¬ÎÒÃÇÈÃMYSQLÌæÎÒÃDZ£³Ö½á¹û¡£
½ÓÏÂÀ´ÊÇÊÓͼ??ÎÒÈ¥µôÁËHTMLÒÔ½ÚÊ¡¿Õ¼ä£¬Äã¿ÉÒԲ鿴ÕâÆªÎÄÕµÄÍêÕû´úÂë¡£
___FCKpd___4
×îºóÊÇ¿ØÖÆÆ÷£¬ÎÒÃǽ«°ÑÊÓͼʵÏÖΪһ¸ö×ÓÀà¡£
___FCKpd___5
ƯÁÁ¶ø¼òµ¥¡£
ÎÒÃÇÓÐһЩʹÓÿØÖÆÆ÷µÄ¼¼ÇÉ£¬ÔÚPHPÖÐÄã¿ÉÒÔÕâÑù×ö£º
___FCKpd___7
Ò»¸ö½¨ÒéÊÇÄã×îºÃ¶¨Òå³ÌÐòURLµÄÃû×Ö¿Õ¼äÐÎʽ£¨namespace£©£¬ÄÇÑùËü»á±È½Ï¹æ·¶±ÈÈ磺
___FCKpd___8
ͨ¹ýËüÎÒÃÇ¿ÉÒÔÕâÑù´¦ÀíÎÒÃǵĿØÖÆÆ÷£º
___FCKpd___9
ÓÐʱºò£¬½¨Á¢¿ØÖÆÆ÷ÊǼþºÜÀ§ÄѵÄÊÂÇ飬±ÈÈçµ±ÄãÔÚ¿ª·¢ËٶȺÍÊÊÓ¦ÐÔÖ®¼äȨºâʱ¡£Ò»¸ö»ñµÃÁé¸ÐµÄºÃÈ¥´¦ÊÇApache group µÄJava Struts£¬ËüµÄ¿ØÖÆÆ÷ÍêÈ«ÊÇÓÉXMLÎĵµ¶¨ÒåµÄ¡£ GET['viewpage']) { case "news": $page=new NewsRenderer; break; case "links": $page=new LinksRenderer; break; default: $page=new HomePageRenderer; break; } $page->display(); ?>
×¢ÒâÕâ²»ÊÇʵÏÖMVCµÄΨһ·½Ê½??±ÈÈçÄã¿ÉÒÔÓÿØÖÆÆ÷ʵÏÖÄ£ÐÍͬʱÕûºÏÊÓͼ¡£ÕâÖ»ÊÇÑÝʾģʽµÄÒ»ÖÖ·½·¨¡£
ÎÒÃǵÄindex.php Îļþ¿´ÆðÀ´ÏñÕâÑù£º
___FCKpd___6
ƯÁÁ¶ø¼òµ¥¡£
ÎÒÃÇÓÐһЩʹÓÿØÖÆÆ÷µÄ¼¼ÇÉ£¬ÔÚPHPÖÐÄã¿ÉÒÔÕâÑù×ö£º
___FCKpd___7
Ò»¸ö½¨ÒéÊÇÄã×îºÃ¶¨Òå³ÌÐòURLµÄÃû×Ö¿Õ¼äÐÎʽ£¨namespace£©£¬ÄÇÑùËü»á±È½Ï¹æ·¶±ÈÈ磺
"index.php?class=ProductView&method=productItem&id=4"
ͨ¹ýËüÎÒÃÇ¿ÉÒÔÕâÑù´¦ÀíÎÒÃǵĿØÖÆÆ÷£º
___FCKpd___9
ÓÐʱºò£¬½¨Á¢¿ØÖÆÆ÷ÊǼþºÜÀ§ÄѵÄÊÂÇ飬±ÈÈçµ±ÄãÔÚ¿ª·¢ËٶȺÍÊÊÓ¦ÐÔÖ®¼äȨºâʱ¡£Ò»¸ö»ñµÃÁé¸ÐµÄºÃÈ¥´¦ÊÇApache group µÄJava Struts£¬ËüµÄ¿ØÖÆÆ÷ÍêÈ«ÊÇÓÉXMLÎĵµ¶¨ÒåµÄ¡£ GET['viewpage']) { case "news": $page=new NewsRenderer; break; case "links": $page=new LinksRenderer; break; default: $page=new HomePageRenderer; break; } $page->display(); ?>
×¢ÒâÕâ²»ÊÇʵÏÖMVCµÄΨһ·½Ê½??±ÈÈçÄã¿ÉÒÔÓÿØÖÆÆ÷ʵÏÖÄ£ÐÍͬʱÕûºÏÊÓͼ¡£ÕâÖ»ÊÇÑÝʾģʽµÄÒ»ÖÖ·½·¨¡£
ÎÒÃǵÄindex.php Îļþ¿´ÆðÀ´ÏñÕâÑù£º
___FCKpd___6
ƯÁÁ¶ø¼òµ¥¡£
ÎÒÃÇÓÐһЩʹÓÿØÖÆÆ÷µÄ¼¼ÇÉ£¬ÔÚPHPÖÐÄã¿ÉÒÔÕâÑù×ö£º
___FCKpd___7
Ò»¸ö½¨ÒéÊÇÄã×îºÃ¶¨Òå³ÌÐòURLµÄÃû×Ö¿Õ¼äÐÎʽ£¨namespace£©£¬ÄÇÑùËü»á±È½Ï¹æ·¶±ÈÈ磺
___FCKpd___8
ͨ¹ýËüÎÒÃÇ¿ÉÒÔÕâÑù´¦ÀíÎÒÃǵĿØÖÆÆ÷£º
___FCKpd___9
ÓÐʱºò£¬½¨Á¢¿ØÖÆÆ÷ÊǼþºÜÀ§ÄѵÄÊÂÇ飬±ÈÈçµ±ÄãÔÚ¿ª·¢ËٶȺÍÊÊÓ¦ÐÔÖ®¼äȨºâʱ¡£Ò»¸ö»ñµÃÁé¸ÐµÄºÃÈ¥´¦ÊÇApache group µÄJava Struts£¬ËüµÄ¿ØÖÆÆ÷ÍêÈ«ÊÇÓÉXMLÎĵµ¶¨ÒåµÄ¡£ GET); echo $productController->display(); ?>
×¢ÒâÕâ²»ÊÇʵÏÖMVCµÄΨһ·½Ê½??±ÈÈçÄã¿ÉÒÔÓÿØÖÆÆ÷ʵÏÖÄ£ÐÍͬʱÕûºÏÊÓͼ¡£ÕâÖ»ÊÇÑÝʾģʽµÄÒ»ÖÖ·½·¨¡£
ÎÒÃǵÄindex.php Îļþ¿´ÆðÀ´ÏñÕâÑù£º
___FCKpd___6
ƯÁÁ¶ø¼òµ¥¡£
ÎÒÃÇÓÐһЩʹÓÿØÖÆÆ÷µÄ¼¼ÇÉ£¬ÔÚPHPÖÐÄã¿ÉÒÔÕâÑù×ö£º
___FCKpd___7
Ò»¸ö½¨ÒéÊÇÄã×îºÃ¶¨Òå³ÌÐòURLµÄÃû×Ö¿Õ¼äÐÎʽ£¨namespace£©£¬ÄÇÑùËü»á±È½Ï¹æ·¶±ÈÈ磺
___FCKpd___8
ͨ¹ýËüÎÒÃÇ¿ÉÒÔÕâÑù´¦ÀíÎÒÃǵĿØÖÆÆ÷£º
___FCKpd___9
ÓÐʱºò£¬½¨Á¢¿ØÖÆÆ÷ÊǼþºÜÀ§ÄѵÄÊÂÇ飬±ÈÈçµ±ÄãÔÚ¿ª·¢ËٶȺÍÊÊÓ¦ÐÔÖ®¼äȨºâʱ¡£Ò»¸ö»ñµÃÁé¸ÐµÄºÃÈ¥´¦ÊÇApache group µÄJava Struts£¬ËüµÄ¿ØÖÆÆ÷ÍêÈ«ÊÇÓÉXMLÎĵµ¶¨ÒåµÄ¡£ GET['method']}(MVCģʽÔÚÍøÕ¾¼Ü¹¹ÖÐÊ®·Ö³£¼û¡£ËüÔÊÐíÎÒÃǽ¨Á¢Ò»¸öÈý²ã½á¹¹µÄÓ¦ÓóÌʽ£¬´Ó´úÂëÖзÖÀë³öÓÐÓõIJ㣬°ïÖúÉè¼ÆÊ¦ºÍ¿ª·¢ÕßÐͬ¹¤×÷ÒÔ¼°Ìá¸ßÎÒÃÇά»¤ºÍÀ©Õ¹¼ÈÓгÌʽµÄÄÜÁ¦¡£
ÊÓͼ£¨View£©
“ÊÓͼ”Ö÷ÒªÖ¸ÎÒÃÇË͵½Webä¯ÀÀÆ÷µÄ×îÖÕ½á¹û??±ÈÈçÎÒÃǵĽű¾Éú³ÉµÄHTML¡£µ±Ëµµ½ÊÓͼʱ£¬ºÜ¶àÈËÏëµ½µÄÊÇÄ£°æ£¬µ«ÊǰÑÄ£°å·½°¸½Ð×öÊÓͼµÄÕýÈ·ÐÔÊÇÖµµÃ»³Òɵġ£
¶ÔÊÓͼÀ´Ëµ£¬×îÖØÒªµÄÊÂÇé¿ÉÄÜÊÇËüÓ¦¸ÃÊÇ“×ÔÎÒÒâʶ£¨self aware£©”µÄ£¬ÊÓͼ±»äÖȾ£¨render£©Ê±£¬ÊÓͼµÄÔªËØÄÜÒâʶµ½×Ô¼ºÔÚ¸ü´ó¿ò¼ÜÖеĽÇÉ«¡£
ÒÔXMLΪÀý£¬¿ÉÒÔ˵XMLÔÚ±»½âÎöʱ£¬DOM APIÓÐ×ÅÕâÑùµÄÈÏÖª??Ò»¸öDOMÊ÷ÀïµÄ½ÚµãÖªµÀËüÔÚÄÄÀïºÍËü°üº¬ÁËʲô¡£ £¨µ±Ò»¸öXMLÎĵµÖеĽڵãÓÃSAX½âÎöʱֻÓе±½âÎöµ½¸Ã½ÚµãʱËü²ÅÓÐÒâÒå¡££©
¾ø´ó¶àÊýÄ£°å·½°¸Ê¹Óüòµ¥µÄ¹ý³ÌÓïÑÔºÍÕâÑùµÄÄ£°å±êÇ©£º
<p>{some_text}</p> <p>{some_more_text}</p>
ËüÃÇÔÚÎĵµÖÐûÓÐÒâÒ壬ËüÃÇ´ú±íµÄÒâÒåÖ»ÊÇPHP½«ÓÃÆäËûµÄ¶«Î÷À´Ìæ»»Ëü¡£
Èç¹ûÄãͬÒâÕâÖÖ¶ÔÊÓͼµÄËÉÉ¢ÃèÊö£¬ÄãÒ²¾Í»áͬÒâ¾ø´ó¶àÊýÄ£°å·½°¸²¢Ã»ÓÐÓÐЧµÄ·ÖÀëÊÓͼºÍÄ£ÐÍ¡£Ä£°å±êÇ©½«±»Ìæ»»³Éʲô´æ·ÅÔÚÄ£ÐÍÖС£
ÔÚÄãʵÏÖÊÓͼʱÎÊ×Ô¼º¼¸¸öÎÊÌ⣺“È«ÌåÊÓͼµÄÌæ»»ÈÝÒ×Â𣿔“ʵÏÖÒ»¸öÐÂÊÓͼҪ¶à¾Ã£¿” “ÄܺÜÈÝÒ×µÄÌæ»»ÊÓͼµÄÃèÊöÓïÑÔÂ𣿣¨±ÈÈçÔÚͬһ¸öÊÓͼÖÐÓÃSOAPÎĵµÌæ»»HTMLÎĵµ£©”
Ä£ÐÍ£¨Model£©
Ä£ÐÍ´ú±íÁ˳ÌÐòÂß¼¡££¨ÔÚÆóÒµ¼¶³ÌÐòÖо³£³ÆÎªÒµÎñ²ã£¨business layer£©£©
×ܵÄÀ´Ëµ£¬Ä£Ð͵ÄÈÎÎñÊǰÑÔÓÐÊý¾Ýת»»³É°üº¬Ä³Ð©ÒâÒåµÄÊý¾Ý£¬ÕâЩÊý¾Ý½«±»ÊÓͼËùÏÔʾ¡£Í¨³££¬Ä£Ðͽ«·â×°Êý¾Ý²éѯ£¬¿ÉÄÜͨ¹ýһЩ³éÏóÊý¾ÝÀࣨÊý¾Ý·ÃÎʲ㣩À´ÊµÏÖ²éѯ¡£¾ÙÀý˵£¬ÄãÏ£Íû¼ÆËãÓ¢¹úÄê¶È½µÓêÁ¿£¨Ö»ÊÇΪÁ˸øÄã×Ô¼ºÕÒ¸öºÃµãµÄ¶È¼ÙµØ£©£¬Ä£Ðͽ«½ÓÊÕÊ®ÄêÖÐÿÌìµÄ½µÓêÁ¿£¬¼ÆËã³öƽ¾ùÖµ£¬ÔÙ´«µÝ¸øÊÓͼ¡£
¿ØÖÆÆ÷£¨controller£©
¼òµ¥µÄ˵¿ØÖÆÆ÷ÊÇWebÓ¦ÓÃÖнøÈëµÄHTTPÇëÇó×îÏȵ÷ÓõÄÒ»²¿·Ö¡£Ëü¼ì²éÊÕµ½µÄÇëÇ󣬱ÈÈçһЩGET±äÁ¿£¬×ö³öºÏÊʵķ´À¡¡£ÔÚд³öÄãµÄµÚÒ»¸ö¿ØÖÆÆ÷֮ǰ£¬ÄãºÜÄÑ¿ªÊ¼±àдÆäËûµÄPHP´úÂë¡£×î³£¼ûµÄÓ÷¨ÊÇindex.phpÖÐÏñswitchÓï¾äµÄ½á¹¹£º
<?php switch (MVCģʽÔÚÍøÕ¾¼Ü¹¹ÖÐÊ®·Ö³£¼û¡£ËüÔÊÐíÎÒÃǽ¨Á¢Ò»¸öÈý²ã½á¹¹µÄÓ¦ÓóÌʽ£¬´Ó´úÂëÖзÖÀë³öÓÐÓõIJ㣬°ïÖúÉè¼ÆÊ¦ºÍ¿ª·¢ÕßÐͬ¹¤×÷ÒÔ¼°Ìá¸ßÎÒÃÇά»¤ºÍÀ©Õ¹¼ÈÓгÌʽµÄÄÜÁ¦¡£
ÊÓͼ£¨View£©
“ÊÓͼ”Ö÷ÒªÖ¸ÎÒÃÇË͵½Webä¯ÀÀÆ÷µÄ×îÖÕ½á¹û??±ÈÈçÎÒÃǵĽű¾Éú³ÉµÄHTML¡£µ±Ëµµ½ÊÓͼʱ£¬ºÜ¶àÈËÏëµ½µÄÊÇÄ£°æ£¬µ«ÊǰÑÄ£°å·½°¸½Ð×öÊÓͼµÄÕýÈ·ÐÔÊÇÖµµÃ»³Òɵġ£
¶ÔÊÓͼÀ´Ëµ£¬×îÖØÒªµÄÊÂÇé¿ÉÄÜÊÇËüÓ¦¸ÃÊÇ“×ÔÎÒÒâʶ£¨self aware£©”µÄ£¬ÊÓͼ±»äÖȾ£¨render£©Ê±£¬ÊÓͼµÄÔªËØÄÜÒâʶµ½×Ô¼ºÔÚ¸ü´ó¿ò¼ÜÖеĽÇÉ«¡£
ÒÔXMLΪÀý£¬¿ÉÒÔ˵XMLÔÚ±»½âÎöʱ£¬DOM APIÓÐ×ÅÕâÑùµÄÈÏÖª??Ò»¸öDOMÊ÷ÀïµÄ½ÚµãÖªµÀËüÔÚÄÄÀïºÍËü°üº¬ÁËʲô¡£ £¨µ±Ò»¸öXMLÎĵµÖеĽڵãÓÃSAX½âÎöʱֻÓе±½âÎöµ½¸Ã½ÚµãʱËü²ÅÓÐÒâÒå¡££©
¾ø´ó¶àÊýÄ£°å·½°¸Ê¹Óüòµ¥µÄ¹ý³ÌÓïÑÔºÍÕâÑùµÄÄ£°å±êÇ©£º
<p>{some_text}</p> <p>{some_more_text}</p>
ËüÃÇÔÚÎĵµÖÐûÓÐÒâÒ壬ËüÃÇ´ú±íµÄÒâÒåÖ»ÊÇPHP½«ÓÃÆäËûµÄ¶«Î÷À´Ìæ»»Ëü¡£
Èç¹ûÄãͬÒâÕâÖÖ¶ÔÊÓͼµÄËÉÉ¢ÃèÊö£¬ÄãÒ²¾Í»áͬÒâ¾ø´ó¶àÊýÄ£°å·½°¸²¢Ã»ÓÐÓÐЧµÄ·ÖÀëÊÓͼºÍÄ£ÐÍ¡£Ä£°å±êÇ©½«±»Ìæ»»³Éʲô´æ·ÅÔÚÄ£ÐÍÖС£
ÔÚÄãʵÏÖÊÓͼʱÎÊ×Ô¼º¼¸¸öÎÊÌ⣺“È«ÌåÊÓͼµÄÌæ»»ÈÝÒ×Â𣿔“ʵÏÖÒ»¸öÐÂÊÓͼҪ¶à¾Ã£¿” “ÄܺÜÈÝÒ×µÄÌæ»»ÊÓͼµÄÃèÊöÓïÑÔÂ𣿣¨±ÈÈçÔÚͬһ¸öÊÓͼÖÐÓÃSOAPÎĵµÌæ»»HTMLÎĵµ£©”
Ä£ÐÍ£¨Model£©
Ä£ÐÍ´ú±íÁ˳ÌÐòÂß¼¡££¨ÔÚÆóÒµ¼¶³ÌÐòÖо³£³ÆÎªÒµÎñ²ã£¨business layer£©£©
×ܵÄÀ´Ëµ£¬Ä£Ð͵ÄÈÎÎñÊǰÑÔÓÐÊý¾Ýת»»³É°üº¬Ä³Ð©ÒâÒåµÄÊý¾Ý£¬ÕâЩÊý¾Ý½«±»ÊÓͼËùÏÔʾ¡£Í¨³££¬Ä£Ðͽ«·â×°Êý¾Ý²éѯ£¬¿ÉÄÜͨ¹ýһЩ³éÏóÊý¾ÝÀࣨÊý¾Ý·ÃÎʲ㣩À´ÊµÏÖ²éѯ¡£¾ÙÀý˵£¬ÄãÏ£Íû¼ÆËãÓ¢¹úÄê¶È½µÓêÁ¿£¨Ö»ÊÇΪÁ˸øÄã×Ô¼ºÕÒ¸öºÃµãµÄ¶È¼ÙµØ£©£¬Ä£Ðͽ«½ÓÊÕÊ®ÄêÖÐÿÌìµÄ½µÓêÁ¿£¬¼ÆËã³öƽ¾ùÖµ£¬ÔÙ´«µÝ¸øÊÓͼ¡£
¿ØÖÆÆ÷£¨controller£©
¼òµ¥µÄ˵¿ØÖÆÆ÷ÊÇWebÓ¦ÓÃÖнøÈëµÄHTTPÇëÇó×îÏȵ÷ÓõÄÒ»²¿·Ö¡£Ëü¼ì²éÊÕµ½µÄÇëÇ󣬱ÈÈçһЩGET±äÁ¿£¬×ö³öºÏÊʵķ´À¡¡£ÔÚд³öÄãµÄµÚÒ»¸ö¿ØÖÆÆ÷֮ǰ£¬ÄãºÜÄÑ¿ªÊ¼±àдÆäËûµÄPHP´úÂë¡£×î³£¼ûµÄÓ÷¨ÊÇindex.phpÖÐÏñswitchÓï¾äµÄ½á¹¹£º
___FCKpd___1
Õâ¶Î´úÂë»ìÓÃÁËÃæÏò¹ý³ÌºÍ¶ÔÏóµÄ´úÂ룬µ«ÊǶÔÓÚСµÄÕ¾µãÀ´Ëµ£¬Õâͨ³£ÊÇ×îºÃµÄÑ¡Ôñ¡£ËäÈ»ÉϱߵĴúÂ뻹¿ÉÒÔÓÅ»¯¡£
¿ØÖÆÆ÷ʵ¼ÊÉÏÊÇÓÃÀ´´¥·¢Ä£Ð͵ÄÊý¾ÝºÍÊÓÍ¼ÔªËØÖ®¼äµÄ°ó¶¨µÄ¿Ø¼þ¡£
Àý×Ó
ÕâÀïÊÇÒ»¸öʹÓÃMVCģʽµÄ¼òµ¥Àý×Ó¡£
Ê×ÏÈÎÒÃÇÐèÒªÒ»¸öÊý¾Ý¿â·ÃÎÊÀ࣬ËüÊÇÒ»¸öÆÕͨÀà¡£
<?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; } } ?>
ÔÚËüÉϱ߷ÅÉÏÄ£ÐÍ¡£
<?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ÌæÎÒÃDZ£³Ö½á¹û¡£
½ÓÏÂÀ´ÊÇÊÓͼ??ÎÒÈ¥µôÁË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 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ģʽµÄ¼òµ¥Àý×Ó¡£
Ê×ÏÈÎÒÃÇÐèÒªÒ»¸öÊý¾Ý¿â·ÃÎÊÀ࣬ËüÊÇÒ»¸öÆÕͨÀà¡£
___FCKpd___2
ÔÚËüÉϱ߷ÅÉÏÄ£ÐÍ¡£
___FCKpd___3
ÓÐÒ»µãҪעÒâµÄÊÇ£¬ÔÚÄ£ÐͺÍÊý¾Ý·ÃÎÊÀàÖ®¼ä£¬ËüÃǵĽ»»¥´Ó²»»á¶àÓÚÒ»ÐÐ??ûÓжàÐб»´«ËÍ£¬ÄÇÑù»áºÜ¿ìʹ³ÌʽÂýÏÂÀ´¡£Í¬ÑùµÄ³Ìʽ¶ÔÓÚʹÓÃģʽµÄÀ࣬ËüÖ»ÐèÒªÔÚÄÚ´æÖб£ÁôÒ»ÐУ¨Row£©??ÆäËûµÄ½»¸øÒѱ£´æµÄ²éѯ×ÊÔ´£¨query resource£©??»»¾ä»°Ëµ£¬ÎÒÃÇÈÃMYSQLÌæÎÒÃDZ£³Ö½á¹û¡£
½ÓÏÂÀ´ÊÇÊÓͼ??ÎÒÈ¥µôÁËHTMLÒÔ½ÚÊ¡¿Õ¼ä£¬Äã¿ÉÒԲ鿴ÕâÆªÎÄÕµÄÍêÕû´úÂë¡£
___FCKpd___4
×îºóÊÇ¿ØÖÆÆ÷£¬ÎÒÃǽ«°ÑÊÓͼʵÏÖΪһ¸ö×ÓÀà¡£
___FCKpd___5
×¢ÒâÕâ²»ÊÇʵÏÖ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,MVCģʽÔÚÍøÕ¾¼Ü¹¹ÖÐÊ®·Ö³£¼û¡£ËüÔÊÐíÎÒÃǽ¨Á¢Ò»¸öÈý²ã½á¹¹µÄÓ¦ÓóÌʽ£¬´Ó´úÂëÖзÖÀë³öÓÐÓõIJ㣬°ïÖúÉè¼ÆÊ¦ºÍ¿ª·¢ÕßÐͬ¹¤×÷ÒÔ¼°Ìá¸ßÎÒÃÇά»¤ºÍÀ©Õ¹¼ÈÓгÌʽµÄÄÜÁ¦¡£
ÊÓͼ£¨View£©
“ÊÓͼ”Ö÷ÒªÖ¸ÎÒÃÇË͵½Webä¯ÀÀÆ÷µÄ×îÖÕ½á¹û??±ÈÈçÎÒÃǵĽű¾Éú³ÉµÄHTML¡£µ±Ëµµ½ÊÓͼʱ£¬ºÜ¶àÈËÏëµ½µÄÊÇÄ£°æ£¬µ«ÊǰÑÄ£°å·½°¸½Ð×öÊÓͼµÄÕýÈ·ÐÔÊÇÖµµÃ»³Òɵġ£
¶ÔÊÓͼÀ´Ëµ£¬×îÖØÒªµÄÊÂÇé¿ÉÄÜÊÇËüÓ¦¸ÃÊÇ“×ÔÎÒÒâʶ£¨self aware£©”µÄ£¬ÊÓͼ±»äÖȾ£¨render£©Ê±£¬ÊÓͼµÄÔªËØÄÜÒâʶµ½×Ô¼ºÔÚ¸ü´ó¿ò¼ÜÖеĽÇÉ«¡£
ÒÔXMLΪÀý£¬¿ÉÒÔ˵XMLÔÚ±»½âÎöʱ£¬DOM APIÓÐ×ÅÕâÑùµÄÈÏÖª??Ò»¸öDOMÊ÷ÀïµÄ½ÚµãÖªµÀËüÔÚÄÄÀïºÍËü°üº¬ÁËʲô¡£ £¨µ±Ò»¸öXMLÎĵµÖеĽڵãÓÃSAX½âÎöʱֻÓе±½âÎöµ½¸Ã½ÚµãʱËü²ÅÓÐÒâÒå¡££©
¾ø´ó¶àÊýÄ£°å·½°¸Ê¹Óüòµ¥µÄ¹ý³ÌÓïÑÔºÍÕâÑùµÄÄ£°å±êÇ©£º
<p>{some_text}</p> <p>{some_more_text}</p>
ËüÃÇÔÚÎĵµÖÐûÓÐÒâÒ壬ËüÃÇ´ú±íµÄÒâÒåÖ»ÊÇPHP½«ÓÃÆäËûµÄ¶«Î÷À´Ìæ»»Ëü¡£
Èç¹ûÄãͬÒâÕâÖÖ¶ÔÊÓͼµÄËÉÉ¢ÃèÊö£¬ÄãÒ²¾Í»áͬÒâ¾ø´ó¶àÊýÄ£°å·½°¸²¢Ã»ÓÐÓÐЧµÄ·ÖÀëÊÓͼºÍÄ£ÐÍ¡£Ä£°å±êÇ©½«±»Ìæ»»³Éʲô´æ·ÅÔÚÄ£ÐÍÖС£
ÔÚÄãʵÏÖÊÓͼʱÎÊ×Ô¼º¼¸¸öÎÊÌ⣺“È«ÌåÊÓͼµÄÌæ»»ÈÝÒ×Â𣿔“ʵÏÖÒ»¸öÐÂÊÓͼҪ¶à¾Ã£¿” “ÄܺÜÈÝÒ×µÄÌæ»»ÊÓͼµÄÃèÊöÓïÑÔÂ𣿣¨±ÈÈçÔÚͬһ¸öÊÓͼÖÐÓÃSOAPÎĵµÌæ»»HTMLÎĵµ£©”
Ä£ÐÍ£¨Model£©
Ä£ÐÍ´ú±íÁ˳ÌÐòÂß¼¡££¨ÔÚÆóÒµ¼¶³ÌÐòÖо³£³ÆÎªÒµÎñ²ã£¨business layer£©£©
×ܵÄÀ´Ëµ£¬Ä£Ð͵ÄÈÎÎñÊǰÑÔÓÐÊý¾Ýת»»³É°üº¬Ä³Ð©ÒâÒåµÄÊý¾Ý£¬ÕâЩÊý¾Ý½«±»ÊÓͼËùÏÔʾ¡£Í¨³££¬Ä£Ðͽ«·â×°Êý¾Ý²éѯ£¬¿ÉÄÜͨ¹ýһЩ³éÏóÊý¾ÝÀࣨÊý¾Ý·ÃÎʲ㣩À´ÊµÏÖ²éѯ¡£¾ÙÀý˵£¬ÄãÏ£Íû¼ÆËãÓ¢¹úÄê¶È½µÓêÁ¿£¨Ö»ÊÇΪÁ˸øÄã×Ô¼ºÕÒ¸öºÃµãµÄ¶È¼ÙµØ£©£¬Ä£Ðͽ«½ÓÊÕÊ®ÄêÖÐÿÌìµÄ½µÓêÁ¿£¬¼ÆËã³öƽ¾ùÖµ£¬ÔÙ´«µÝ¸øÊÓͼ¡£
¿ØÖÆÆ÷£¨controller£©
¼òµ¥µÄ˵¿ØÖÆÆ÷ÊÇWebÓ¦ÓÃÖнøÈëµÄHTTPÇëÇó×îÏȵ÷ÓõÄÒ»²¿·Ö¡£Ëü¼ì²éÊÕµ½µÄÇëÇ󣬱ÈÈçһЩGET±äÁ¿£¬×ö³öºÏÊʵķ´À¡¡£ÔÚд³öÄãµÄµÚÒ»¸ö¿ØÖÆÆ÷֮ǰ£¬ÄãºÜÄÑ¿ªÊ¼±àдÆäËûµÄPHP´úÂë¡£×î³£¼ûµÄÓ÷¨ÊÇindex.phpÖÐÏñswitchÓï¾äµÄ½á¹¹£º
<?php switch (MVCģʽÔÚÍøÕ¾¼Ü¹¹ÖÐÊ®·Ö³£¼û¡£ËüÔÊÐíÎÒÃǽ¨Á¢Ò»¸öÈý²ã½á¹¹µÄÓ¦ÓóÌʽ£¬´Ó´úÂëÖзÖÀë³öÓÐÓõIJ㣬°ïÖúÉè¼ÆÊ¦ºÍ¿ª·¢ÕßÐͬ¹¤×÷ÒÔ¼°Ìá¸ßÎÒÃÇά»¤ºÍÀ©Õ¹¼ÈÓгÌʽµÄÄÜÁ¦¡£
ÊÓͼ£¨View£©
“ÊÓͼ”Ö÷ÒªÖ¸ÎÒÃÇË͵½Webä¯ÀÀÆ÷µÄ×îÖÕ½á¹û??±ÈÈçÎÒÃǵĽű¾Éú³ÉµÄHTML¡£µ±Ëµµ½ÊÓͼʱ£¬ºÜ¶àÈËÏëµ½µÄÊÇÄ£°æ£¬µ«ÊǰÑÄ£°å·½°¸½Ð×öÊÓͼµÄÕýÈ·ÐÔÊÇÖµµÃ»³Òɵġ£
¶ÔÊÓͼÀ´Ëµ£¬×îÖØÒªµÄÊÂÇé¿ÉÄÜÊÇËüÓ¦¸ÃÊÇ“×ÔÎÒÒâʶ£¨self aware£©”µÄ£¬ÊÓͼ±»äÖȾ£¨render£©Ê±£¬ÊÓͼµÄÔªËØÄÜÒâʶµ½×Ô¼ºÔÚ¸ü´ó¿ò¼ÜÖеĽÇÉ«¡£
ÒÔXMLΪÀý£¬¿ÉÒÔ˵XMLÔÚ±»½âÎöʱ£¬DOM APIÓÐ×ÅÕâÑùµÄÈÏÖª??Ò»¸öDOMÊ÷ÀïµÄ½ÚµãÖªµÀËüÔÚÄÄÀïºÍËü°üº¬ÁËʲô¡£ £¨µ±Ò»¸öXMLÎĵµÖеĽڵãÓÃSAX½âÎöʱֻÓе±½âÎöµ½¸Ã½ÚµãʱËü²ÅÓÐÒâÒå¡££©
¾ø´ó¶àÊýÄ£°å·½°¸Ê¹Óüòµ¥µÄ¹ý³ÌÓïÑÔºÍÕâÑùµÄÄ£°å±êÇ©£º
<p>{some_text}</p> <p>{some_more_text}</p>
ËüÃÇÔÚÎĵµÖÐûÓÐÒâÒ壬ËüÃÇ´ú±íµÄÒâÒåÖ»ÊÇPHP½«ÓÃÆäËûµÄ¶«Î÷À´Ìæ»»Ëü¡£
Èç¹ûÄãͬÒâÕâÖÖ¶ÔÊÓͼµÄËÉÉ¢ÃèÊö£¬ÄãÒ²¾Í»áͬÒâ¾ø´ó¶àÊýÄ£°å·½°¸²¢Ã»ÓÐÓÐЧµÄ·ÖÀëÊÓͼºÍÄ£ÐÍ¡£Ä£°å±êÇ©½«±»Ìæ»»³Éʲô´æ·ÅÔÚÄ£ÐÍÖС£
ÔÚÄãʵÏÖÊÓͼʱÎÊ×Ô¼º¼¸¸öÎÊÌ⣺“È«ÌåÊÓͼµÄÌæ»»ÈÝÒ×Â𣿔“ʵÏÖÒ»¸öÐÂÊÓͼҪ¶à¾Ã£¿” “ÄܺÜÈÝÒ×µÄÌæ»»ÊÓͼµÄÃèÊöÓïÑÔÂ𣿣¨±ÈÈçÔÚͬһ¸öÊÓͼÖÐÓÃSOAPÎĵµÌæ»»HTMLÎĵµ£©”
Ä£ÐÍ£¨Model£©
Ä£ÐÍ´ú±íÁ˳ÌÐòÂß¼¡££¨ÔÚÆóÒµ¼¶³ÌÐòÖо³£³ÆÎªÒµÎñ²ã£¨business layer£©£©
×ܵÄÀ´Ëµ£¬Ä£Ð͵ÄÈÎÎñÊǰÑÔÓÐÊý¾Ýת»»³É°üº¬Ä³Ð©ÒâÒåµÄÊý¾Ý£¬ÕâЩÊý¾Ý½«±»ÊÓͼËùÏÔʾ¡£Í¨³££¬Ä£Ðͽ«·â×°Êý¾Ý²éѯ£¬¿ÉÄÜͨ¹ýһЩ³éÏóÊý¾ÝÀࣨÊý¾Ý·ÃÎʲ㣩À´ÊµÏÖ²éѯ¡£¾ÙÀý˵£¬ÄãÏ£Íû¼ÆËãÓ¢¹úÄê¶È½µÓêÁ¿£¨Ö»ÊÇΪÁ˸øÄã×Ô¼ºÕÒ¸öºÃµãµÄ¶È¼ÙµØ£©£¬Ä£Ðͽ«½ÓÊÕÊ®ÄêÖÐÿÌìµÄ½µÓêÁ¿£¬¼ÆËã³öƽ¾ùÖµ£¬ÔÙ´«µÝ¸øÊÓͼ¡£
¿ØÖÆÆ÷£¨controller£©
¼òµ¥µÄ˵¿ØÖÆÆ÷ÊÇWebÓ¦ÓÃÖнøÈëµÄHTTPÇëÇó×îÏȵ÷ÓõÄÒ»²¿·Ö¡£Ëü¼ì²éÊÕµ½µÄÇëÇ󣬱ÈÈçһЩGET±äÁ¿£¬×ö³öºÏÊʵķ´À¡¡£ÔÚд³öÄãµÄµÚÒ»¸ö¿ØÖÆÆ÷֮ǰ£¬ÄãºÜÄÑ¿ªÊ¼±àдÆäËûµÄPHP´úÂë¡£×î³£¼ûµÄÓ÷¨ÊÇindex.phpÖÐÏñswitchÓï¾äµÄ½á¹¹£º
___FCKpd___1
Õâ¶Î´úÂë»ìÓÃÁËÃæÏò¹ý³ÌºÍ¶ÔÏóµÄ´úÂ룬µ«ÊǶÔÓÚСµÄÕ¾µãÀ´Ëµ£¬Õâͨ³£ÊÇ×îºÃµÄÑ¡Ôñ¡£ËäÈ»ÉϱߵĴúÂ뻹¿ÉÒÔÓÅ»¯¡£
¿ØÖÆÆ÷ʵ¼ÊÉÏÊÇÓÃÀ´´¥·¢Ä£Ð͵ÄÊý¾ÝºÍÊÓÍ¼ÔªËØÖ®¼äµÄ°ó¶¨µÄ¿Ø¼þ¡£
Àý×Ó
ÕâÀïÊÇÒ»¸öʹÓÃMVCģʽµÄ¼òµ¥Àý×Ó¡£
Ê×ÏÈÎÒÃÇÐèÒªÒ»¸öÊý¾Ý¿â·ÃÎÊÀ࣬ËüÊÇÒ»¸öÆÕͨÀà¡£
<?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; } } ?>
ÔÚËüÉϱ߷ÅÉÏÄ£ÐÍ¡£
<?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ÌæÎÒÃDZ£³Ö½á¹û¡£
½ÓÏÂÀ´ÊÇÊÓͼ??ÎÒÈ¥µôÁË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 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(); } } ?>
Õâ¶Î´úÂë»ìÓÃÁËÃæÏò¹ý³ÌºÍ¶ÔÏóµÄ´úÂ룬µ«ÊǶÔÓÚСµÄÕ¾µãÀ´Ëµ£¬Õâͨ³£ÊÇ×îºÃµÄÑ¡Ôñ¡£ËäÈ»ÉϱߵĴúÂ뻹¿ÉÒÔÓÅ»¯¡

