|
我自己這個(gè)MVC框架的目的就只是實(shí)現(xiàn)一個(gè)簡(jiǎn)單的MVC流程,其他的大家具體情況具體添加。做到真正的小巧、靈活、高效!
前幾周我寫(xiě)了兩篇文章,《php實(shí)現(xiàn)MVC開(kāi)發(fā)得最簡(jiǎn)單的方法――視圖及模版技術(shù)》、《php實(shí)現(xiàn)MVC開(kāi)發(fā)得最簡(jiǎn)單的方法――單點(diǎn)入口》。今天具體說(shuō)說(shuō)如何實(shí)現(xiàn)MVC的模型。
我沒(méi)有深入研究過(guò)MVC的理論,對(duì)我個(gè)人來(lái)說(shuō),模型就是一個(gè)數(shù)據(jù)庫(kù)的封裝,調(diào)用模型的方法,你可以得到相應(yīng)的數(shù)據(jù),但實(shí)現(xiàn)的細(xì)節(jié)程序員不需要關(guān)心。在實(shí)際開(kāi)發(fā)中,很可能一個(gè)數(shù)據(jù)庫(kù)的表就對(duì)應(yīng)一個(gè)模型。比如說(shuō)一個(gè)用戶信息表userinfo,對(duì)應(yīng)就有一個(gè)模型user,通過(guò)調(diào)用模型user的add()方法你就可以向數(shù)據(jù)庫(kù)添加一條數(shù)據(jù),通過(guò)select()你就可以實(shí)現(xiàn)查詢(xún),通過(guò)update就能實(shí)現(xiàn)更新。同時(shí)模型應(yīng)該是和具體的數(shù)據(jù)庫(kù)類(lèi)型無(wú)關(guān)的,無(wú)論你使用的mysql,oracle還是sql server。同時(shí)我不推薦在WEB開(kāi)發(fā)中使用ROR,復(fù)雜的多表查詢(xún)使用SQL語(yǔ)言是多么方便和快捷的事情,而且性能更好。如果一個(gè)程序員連SQL的知識(shí)都沒(méi)有,我不認(rèn)為他是一個(gè)合格的程序員。所以,我在我的模型里面,提供了一個(gè)query的方法來(lái)實(shí)現(xiàn)直接的SQL查詢(xún)。
下面是模型的一個(gè)大概結(jié)果。不是完整代碼,完整代碼請(qǐng)見(jiàn)demo包。
復(fù)制代碼 代碼如下:
<?
class module{
var $mysql;//數(shù)據(jù)庫(kù)操作類(lèi),可以是mysql,oracle,sql等等
var $tbname;//模型對(duì)應(yīng)的表名稱(chēng)
var $debug=false;//是否是調(diào)試模式
function module($tbname,$db=''){}//構(gòu)造函數(shù)
function _setDebug($debug=true){}//開(kāi)啟或者關(guān)閉調(diào)試模式
function add($row,$tbname=''){}//新增加一條記錄
function query($strsql){}//直接查詢(xún)sql語(yǔ)句
function count($where='',$tbname=''){ }//計(jì)數(shù)統(tǒng)計(jì)
function select($where='',$tbname=''){}//查詢(xún)
function delete($where='',$tbname=''){}//刪除滿足條件的一個(gè)記錄
function update($set,$where,$tbname=''){}//更新指定記錄
function detail($where,$tbname=''){}//詳細(xì)顯示一條記錄
}
?>
在這個(gè)模型里面,我是使用數(shù)組和數(shù)據(jù)庫(kù)的字段來(lái)對(duì)應(yīng)的。早期的phpBEAN里面使用了對(duì)象來(lái)對(duì)應(yīng)。但后來(lái)感覺(jué)這種方法在php中不好,而且增加了很多無(wú)謂的類(lèi)。使用數(shù)組更加方便,效果更好(php中的數(shù)組的確是個(gè)好東西,相對(duì)Java來(lái)說(shuō)好太多了)。
在下面的demo中,我使用了mysql數(shù)據(jù)庫(kù)來(lái)演示,其中數(shù)據(jù)庫(kù)操作類(lèi)改自我原來(lái)的一個(gè)庫(kù)類(lèi),詳細(xì)請(qǐng)看《修改下以前的庫(kù)類(lèi),php5->php4》。
下面,詳細(xì)講解使用demo。^_^
在原來(lái)的的包的index.php里面增加
<?
require_once(SITE_PATH.'/libs/phpbean.class.php');
require_once(SITE_PATH.'/libs/mysql.class.php');
$phpbean=new phpbean();
global $phpbean;
$mysql=new mysql("localhost","****","****","52site");
$phpbean->register('db',$mysql);
unset($mysql);
?>
這段代碼主要是把MYSQL注冊(cè)到注冊(cè)器里面,關(guān)于注冊(cè)器的使用的原理,可以看我翻譯的兩篇文章。
然后新建一個(gè)mysqlController.class.php文件,代碼如下:
<?
/**
* MVC演示demo
* 僅僅實(shí)現(xiàn)最基本的MVC功能,不包含安全處理,數(shù)據(jù)過(guò)濾,及其他優(yōu)化措施。
* @author:feifengxlq
* @since:2007-1-24
* @copyright http://www.phpobject.NET/blog/
*/
class mysqlController
{
var $module;
function mysqlController(){
require_once(SITE_PATH.'/libs/module.class.php');
$this->module=new module('52site_siteinfo');//52site_siteinfo為表名稱(chēng)
$this->module->query("set names 'gb2312'");//如果是MYSQL5請(qǐng)加上這句
}
function indexAction(){
print_r($this->module->select());//這樣實(shí)現(xiàn)了讀取數(shù)據(jù)
}
}
?>
上面首先是控制器的構(gòu)造函數(shù)里面,加入一個(gè)模型。然后在indexAction里面調(diào)用模型的方法來(lái)顯示數(shù)據(jù)。這樣就實(shí)現(xiàn)了最簡(jiǎn)單的查詢(xún)列表。你可以通過(guò)這個(gè)地址來(lái)查看你的結(jié)果http://path/to/yoursite/mv...
以后我會(huì)寫(xiě)一個(gè)具體的demo來(lái)說(shuō)明如何使用模型的其他方法,比如說(shuō)查詢(xún)、更新、增加、分頁(yè)列表、多表連查等等。
php技術(shù):PHP實(shí)現(xiàn)MVC開(kāi)發(fā)得最簡(jiǎn)單的方法――模型,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。