php中的MVC模式運(yùn)用技巧
更新時(shí)間:2007年05月03日 00:00:00 作者:
php中的MVC模式運(yùn)用
首先我來(lái)舉個(gè)例子:
一個(gè)簡(jiǎn)單的文章顯示系統(tǒng)
簡(jiǎn)單期間,我們假定這個(gè)文章系統(tǒng)是只讀的,也就是說(shuō)這個(gè)例子將不涉及文章的發(fā)布,現(xiàn)在開(kāi)始了。
由于只涉及數(shù)據(jù)庫(kù)的讀取,所以我定義了兩個(gè)interface
Interface DataOperation
{
public function select($info);
public function selectNum($info);
}
上面這interface定義了讀取數(shù)據(jù)的接口,select方法將返回所需要的文章。selectNum方法返回文章的總數(shù),這是分頁(yè)顯示時(shí)用到的。$info是一個(gè)數(shù)組,用來(lái)存放查詢條件
Interface DataSource
{
public static function getInstance();
}
這里我們假定我們操作的是數(shù)據(jù)庫(kù),DataSource定義一個(gè)接口,所有實(shí)現(xiàn)該接口的實(shí)例類(lèi)將得到一個(gè)靜態(tài)對(duì)象
Interface Controller
{
public function pop();
public function push();
public function execute();
}
Interface View
{
public function display();
}
好了,我們來(lái)實(shí)現(xiàn).
下面定義一個(gè)類(lèi)來(lái)實(shí)現(xiàn)DataSource接口,這個(gè)類(lèi)運(yùn)用了單例模式
class DataBaseSource implements DataSource
{
public static $instance = null;
public static function getInstance()
{
if(self::$instance == null)
{
self::$instance == new PDO("mysql:host=localhost;dbname=article","root","123456");
}
return self::$instance;
}
}
定義一個(gè)抽象類(lèi)來(lái)實(shí)現(xiàn)DataOperation,我們要共享一個(gè)數(shù)據(jù)庫(kù)連接,所以我在抽象類(lèi)中將這個(gè)數(shù)據(jù)庫(kù)對(duì)象初始化,這樣,所有的子類(lèi)都能共享這個(gè)對(duì)象
abstract class DataBaseOperation implements DataOperation
{
protected $db = null;
public function __construct()
{
$this->db = DataBaseSource::getInstance();
}
public function select($info);
}
下面我來(lái)寫(xiě)一個(gè)業(yè)務(wù)子類(lèi)來(lái)實(shí)現(xiàn)抽象類(lèi)DataBaseOperation
class Tech extends DataBaseOperation
{
public function select($info)
{
//在這里實(shí)現(xiàn)你的代碼
}
public function selectNum($info)
{
//在這里實(shí)現(xiàn)你的代碼
}
}
業(yè)務(wù)邏輯層我們實(shí)現(xiàn)了,下面是控制層
class ViewController implements Controller
{
private $mod = array();
public function push($key,$value);
{
//實(shí)現(xiàn)你的代碼,將類(lèi)注冊(cè)進(jìn)$this->mod;
}
public function pop($key)
{
//實(shí)現(xiàn)你的代碼,將$this->mod[$key]值為null;
}
public function execute($key)
{
//在這里實(shí)現(xiàn)你的代碼,生成實(shí)例.注意利用php5新的特性,異常的處理
}
}
好了,下面是表現(xiàn)層,這里將實(shí)現(xiàn)Interface View
abstract ArticleView implements View
{
protected $smarty = null;
public function __construct()
{
$this->smarty = new Smarty();
///下面你可以定義smarty的一些屬性值
}
}
具體的頁(yè)面,例如科技文章的顯示頁(yè)面
class TechArticleView extends ArticleView
{
public function display()
{
//實(shí)現(xiàn)你的代碼,調(diào)用Tech類(lèi)和更多的DataBaseOperation子類(lèi)
}
}
好了,下面是總?cè)肟?nbsp; index.php
try
{
$viewController = new ViewController();
$viewController->push("tech",TechArticleView);
//持續(xù)的增加
$mod = $_GET["mod"]:$_GET["mod"]:$_POST["mod"];
//最后
$viewController->execute($key);
}
catch(Exception $e)
{
//如何處理異常就是你的事了
}
首先我來(lái)舉個(gè)例子:
一個(gè)簡(jiǎn)單的文章顯示系統(tǒng)
簡(jiǎn)單期間,我們假定這個(gè)文章系統(tǒng)是只讀的,也就是說(shuō)這個(gè)例子將不涉及文章的發(fā)布,現(xiàn)在開(kāi)始了。
由于只涉及數(shù)據(jù)庫(kù)的讀取,所以我定義了兩個(gè)interface
Interface DataOperation
{
public function select($info);
public function selectNum($info);
}
上面這interface定義了讀取數(shù)據(jù)的接口,select方法將返回所需要的文章。selectNum方法返回文章的總數(shù),這是分頁(yè)顯示時(shí)用到的。$info是一個(gè)數(shù)組,用來(lái)存放查詢條件
Interface DataSource
{
public static function getInstance();
}
這里我們假定我們操作的是數(shù)據(jù)庫(kù),DataSource定義一個(gè)接口,所有實(shí)現(xiàn)該接口的實(shí)例類(lèi)將得到一個(gè)靜態(tài)對(duì)象
Interface Controller
{
public function pop();
public function push();
public function execute();
}
Interface View
{
public function display();
}
好了,我們來(lái)實(shí)現(xiàn).
下面定義一個(gè)類(lèi)來(lái)實(shí)現(xiàn)DataSource接口,這個(gè)類(lèi)運(yùn)用了單例模式
class DataBaseSource implements DataSource
{
public static $instance = null;
public static function getInstance()
{
if(self::$instance == null)
{
self::$instance == new PDO("mysql:host=localhost;dbname=article","root","123456");
}
return self::$instance;
}
}
定義一個(gè)抽象類(lèi)來(lái)實(shí)現(xiàn)DataOperation,我們要共享一個(gè)數(shù)據(jù)庫(kù)連接,所以我在抽象類(lèi)中將這個(gè)數(shù)據(jù)庫(kù)對(duì)象初始化,這樣,所有的子類(lèi)都能共享這個(gè)對(duì)象
abstract class DataBaseOperation implements DataOperation
{
protected $db = null;
public function __construct()
{
$this->db = DataBaseSource::getInstance();
}
public function select($info);
}
下面我來(lái)寫(xiě)一個(gè)業(yè)務(wù)子類(lèi)來(lái)實(shí)現(xiàn)抽象類(lèi)DataBaseOperation
class Tech extends DataBaseOperation
{
public function select($info)
{
//在這里實(shí)現(xiàn)你的代碼
}
public function selectNum($info)
{
//在這里實(shí)現(xiàn)你的代碼
}
}
業(yè)務(wù)邏輯層我們實(shí)現(xiàn)了,下面是控制層
class ViewController implements Controller
{
private $mod = array();
public function push($key,$value);
{
//實(shí)現(xiàn)你的代碼,將類(lèi)注冊(cè)進(jìn)$this->mod;
}
public function pop($key)
{
//實(shí)現(xiàn)你的代碼,將$this->mod[$key]值為null;
}
public function execute($key)
{
//在這里實(shí)現(xiàn)你的代碼,生成實(shí)例.注意利用php5新的特性,異常的處理
}
}
好了,下面是表現(xiàn)層,這里將實(shí)現(xiàn)Interface View
abstract ArticleView implements View
{
protected $smarty = null;
public function __construct()
{
$this->smarty = new Smarty();
///下面你可以定義smarty的一些屬性值
}
}
具體的頁(yè)面,例如科技文章的顯示頁(yè)面
class TechArticleView extends ArticleView
{
public function display()
{
//實(shí)現(xiàn)你的代碼,調(diào)用Tech類(lèi)和更多的DataBaseOperation子類(lèi)
}
}
好了,下面是總?cè)肟?nbsp; index.php
try
{
$viewController = new ViewController();
$viewController->push("tech",TechArticleView);
//持續(xù)的增加
$mod = $_GET["mod"]:$_GET["mod"]:$_POST["mod"];
//最后
$viewController->execute($key);
}
catch(Exception $e)
{
//如何處理異常就是你的事了
}
相關(guān)文章
php添加文章時(shí)生成靜態(tài)HTML文章的實(shí)現(xiàn)代碼
PHP生成靜態(tài)文章HTML,有批量的生成,但比較標(biāo)準(zhǔn)的應(yīng)該是在添加文章時(shí)就生成HTML文章,編輯時(shí)再重新生成HTML文章,刪除文章時(shí)同樣也樣刪除多余出來(lái)的HTML文章,這時(shí)批量生成就顯得有點(diǎn)力不從心了,下面就介紹一下PHP在添加文章時(shí)如何生成靜態(tài)的HTML文件2013-02-02
PHP+MySQL高并發(fā)加鎖事務(wù)處理問(wèn)題解決方法
這篇文章主要介紹了PHP+MySQL高并發(fā)加鎖事務(wù)處理問(wèn)題解決方法,結(jié)合實(shí)例形式分析了PHP+MySQL事務(wù)處理相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2018-04-04
PHP7原生MySQL數(shù)據(jù)庫(kù)操作實(shí)現(xiàn)代碼
php7已經(jīng)沒(méi)有mysql這個(gè)擴(kuò)展了,好多貼還是按照以前的方法講,讓我這個(gè)新手來(lái)回找了好多遍都沒(méi)找到mysql,php7用后面兩個(gè)鏈接數(shù)據(jù)庫(kù),千萬(wàn)不要傻傻去找也不要去來(lái)回拷貝什么dll之類(lèi)的2020-07-07
ThinkPHP跳轉(zhuǎn)頁(yè)success及error模板實(shí)例教程
這篇文章主要介紹了ThinkPHP跳轉(zhuǎn)頁(yè)success及error模板實(shí)例教程,可以幫助初學(xué)者進(jìn)一步熟悉ThinkPHP的頁(yè)面跳轉(zhuǎn)流程,需要的朋友可以參考下2014-07-07

