PHP實(shí)現(xiàn)MVC開發(fā)得最簡單的方法——模型
更新時(shí)間:2007年04月10日 00:00:00 作者:
昨天群里有人說使用MVC讓程序多了很多數(shù)據(jù)庫操作,使得性能下降,這著實(shí)讓我吃了一驚。MVC只是一種框架,與數(shù)據(jù)庫操作沒有任何關(guān)系。MVC只是提供一種清晰的編程開發(fā)模式,只要你處理的好,是不可能多處很多無謂的數(shù)據(jù)庫操作的。如果一個(gè)MVC讓一個(gè)程序員在不知情的情況下多出了很多數(shù)據(jù)庫操作就絕對不是一個(gè)很好的MVC架構(gòu)。我覺得MVC只要提供一個(gè)簡單的開發(fā)框架就行了,沒有必要集成很多庫類,庫類最好能讓程序員自己選擇去使用。
我自己這個(gè)MVC框架的目的就只是實(shí)現(xiàn)一個(gè)簡單的MVC流程,其他的大家具體情況具體添加。做到真正的小巧、靈活、高效!
前幾周我寫了兩篇文章,《PHP實(shí)現(xiàn)MVC開發(fā)得最簡單的方法——視圖及模版技術(shù)》、《PHP實(shí)現(xiàn)MVC開發(fā)得最簡單的方法——單點(diǎn)入口》。今天具體說說如何實(shí)現(xiàn)MVC的模型。
我沒有深入研究過MVC的理論,對我個(gè)人來說,模型就是一個(gè)數(shù)據(jù)庫的封裝,調(diào)用模型的方法,你可以得到相應(yīng)的數(shù)據(jù),但實(shí)現(xiàn)的細(xì)節(jié)程序員不需要關(guān)心。在實(shí)際開發(fā)中,很可能一個(gè)數(shù)據(jù)庫的表就對應(yīng)一個(gè)模型。比如說一個(gè)用戶信息表userinfo,對應(yīng)就有一個(gè)模型user,通過調(diào)用模型user的add()方法你就可以向數(shù)據(jù)庫添加一條數(shù)據(jù),通過select()你就可以實(shí)現(xiàn)查詢,通過update就能實(shí)現(xiàn)更新。同時(shí)模型應(yīng)該是和具體的數(shù)據(jù)庫類型無關(guān)的,無論你使用的mysql,oracle還是sql server。同時(shí)我不推薦在WEB開發(fā)中使用ROR,復(fù)雜的多表查詢使用SQL語言是多么方便和快捷的事情,而且性能更好。如果一個(gè)程序員連SQL的知識都沒有,我不認(rèn)為他是一個(gè)合格的程序員。所以,我在我的模型里面,提供了一個(gè)query的方法來實(shí)現(xiàn)直接的SQL查詢。
下面是模型的一個(gè)大概結(jié)果。不是完整代碼,完整代碼請見demo包。
<?
class module{
var $mysql;//數(shù)據(jù)庫操作類,可以是mysql,oracle,sql等等
var $tbname;//模型對應(yīng)的表名稱
var $debug=false;//是否是調(diào)試模式
function module($tbname,$db=''){}//構(gòu)造函數(shù)
function _setDebug($debug=true){}//開啟或者關(guān)閉調(diào)試模式
function add($row,$tbname=''){}//新增加一條記錄
function query($strsql){}//直接查詢sql語句
function count($where='',$tbname=''){ }//計(jì)數(shù)統(tǒng)計(jì)
function select($where='',$tbname=''){}//查詢
function delete($where='',$tbname=''){}//刪除滿足條件的一個(gè)記錄
function update($set,$where,$tbname=''){}//更新指定記錄
function detail($where,$tbname=''){}//詳細(xì)顯示一條記錄
}
?>
在這個(gè)模型里面,我是使用數(shù)組和數(shù)據(jù)庫的字段來對應(yīng)的。早期的PHPBEAN里面使用了對象來對應(yīng)。但后來感覺這種方法在PHP中不好,而且增加了很多無謂的類。使用數(shù)組更加方便,效果更好(PHP中的數(shù)組的確是個(gè)好東西,相對JAVA來說好太多了)。
在下面的demo中,我使用了mysql數(shù)據(jù)庫來演示,其中數(shù)據(jù)庫操作類改自我原來的一個(gè)庫類,詳細(xì)請看《修改下以前的庫類,php5->php4》。
下面,詳細(xì)講解使用demo。^_^
在原來的的包的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注冊到注冊器里面,關(guān)于注冊器的使用的原理,可以看我翻譯的兩篇文章。
然后新建一個(gè)mysqlController.class.php文件,代碼如下:
<?
/**
* MVC演示demo
* 僅僅實(shí)現(xiàn)最基本的MVC功能,不包含安全處理,數(shù)據(jù)過濾,及其他優(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為表名稱
$this->module->query("set names 'gb2312'");//如果是MYSQL5請加上這句
}
function indexAction(){
print_r($this->module->select());//這樣實(shí)現(xiàn)了讀取數(shù)據(jù)
}
}
?>
上面首先是控制器的構(gòu)造函數(shù)里面,加入一個(gè)模型。然后在indexAction里面調(diào)用模型的方法來顯示數(shù)據(jù)。這樣就實(shí)現(xiàn)了最簡單的查詢列表。你可以通過這個(gè)地址來查看你的結(jié)果http://path/to/yoursite/mv...
以后我會寫一個(gè)具體的demo來說明如何使用模型的其他方法,比如說查詢、更新、增加、分頁列表、多表連查等等。
我自己這個(gè)MVC框架的目的就只是實(shí)現(xiàn)一個(gè)簡單的MVC流程,其他的大家具體情況具體添加。做到真正的小巧、靈活、高效!
前幾周我寫了兩篇文章,《PHP實(shí)現(xiàn)MVC開發(fā)得最簡單的方法——視圖及模版技術(shù)》、《PHP實(shí)現(xiàn)MVC開發(fā)得最簡單的方法——單點(diǎn)入口》。今天具體說說如何實(shí)現(xiàn)MVC的模型。
我沒有深入研究過MVC的理論,對我個(gè)人來說,模型就是一個(gè)數(shù)據(jù)庫的封裝,調(diào)用模型的方法,你可以得到相應(yīng)的數(shù)據(jù),但實(shí)現(xiàn)的細(xì)節(jié)程序員不需要關(guān)心。在實(shí)際開發(fā)中,很可能一個(gè)數(shù)據(jù)庫的表就對應(yīng)一個(gè)模型。比如說一個(gè)用戶信息表userinfo,對應(yīng)就有一個(gè)模型user,通過調(diào)用模型user的add()方法你就可以向數(shù)據(jù)庫添加一條數(shù)據(jù),通過select()你就可以實(shí)現(xiàn)查詢,通過update就能實(shí)現(xiàn)更新。同時(shí)模型應(yīng)該是和具體的數(shù)據(jù)庫類型無關(guān)的,無論你使用的mysql,oracle還是sql server。同時(shí)我不推薦在WEB開發(fā)中使用ROR,復(fù)雜的多表查詢使用SQL語言是多么方便和快捷的事情,而且性能更好。如果一個(gè)程序員連SQL的知識都沒有,我不認(rèn)為他是一個(gè)合格的程序員。所以,我在我的模型里面,提供了一個(gè)query的方法來實(shí)現(xiàn)直接的SQL查詢。
下面是模型的一個(gè)大概結(jié)果。不是完整代碼,完整代碼請見demo包。
復(fù)制代碼 代碼如下:
<?
class module{
var $mysql;//數(shù)據(jù)庫操作類,可以是mysql,oracle,sql等等
var $tbname;//模型對應(yīng)的表名稱
var $debug=false;//是否是調(diào)試模式
function module($tbname,$db=''){}//構(gòu)造函數(shù)
function _setDebug($debug=true){}//開啟或者關(guān)閉調(diào)試模式
function add($row,$tbname=''){}//新增加一條記錄
function query($strsql){}//直接查詢sql語句
function count($where='',$tbname=''){ }//計(jì)數(shù)統(tǒng)計(jì)
function select($where='',$tbname=''){}//查詢
function delete($where='',$tbname=''){}//刪除滿足條件的一個(gè)記錄
function update($set,$where,$tbname=''){}//更新指定記錄
function detail($where,$tbname=''){}//詳細(xì)顯示一條記錄
}
?>
在這個(gè)模型里面,我是使用數(shù)組和數(shù)據(jù)庫的字段來對應(yīng)的。早期的PHPBEAN里面使用了對象來對應(yīng)。但后來感覺這種方法在PHP中不好,而且增加了很多無謂的類。使用數(shù)組更加方便,效果更好(PHP中的數(shù)組的確是個(gè)好東西,相對JAVA來說好太多了)。
在下面的demo中,我使用了mysql數(shù)據(jù)庫來演示,其中數(shù)據(jù)庫操作類改自我原來的一個(gè)庫類,詳細(xì)請看《修改下以前的庫類,php5->php4》。
下面,詳細(xì)講解使用demo。^_^
在原來的的包的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注冊到注冊器里面,關(guān)于注冊器的使用的原理,可以看我翻譯的兩篇文章。
然后新建一個(gè)mysqlController.class.php文件,代碼如下:
<?
/**
* MVC演示demo
* 僅僅實(shí)現(xiàn)最基本的MVC功能,不包含安全處理,數(shù)據(jù)過濾,及其他優(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為表名稱
$this->module->query("set names 'gb2312'");//如果是MYSQL5請加上這句
}
function indexAction(){
print_r($this->module->select());//這樣實(shí)現(xiàn)了讀取數(shù)據(jù)
}
}
?>
上面首先是控制器的構(gòu)造函數(shù)里面,加入一個(gè)模型。然后在indexAction里面調(diào)用模型的方法來顯示數(shù)據(jù)。這樣就實(shí)現(xiàn)了最簡單的查詢列表。你可以通過這個(gè)地址來查看你的結(jié)果http://path/to/yoursite/mv...
以后我會寫一個(gè)具體的demo來說明如何使用模型的其他方法,比如說查詢、更新、增加、分頁列表、多表連查等等。
您可能感興趣的文章:
- ThinkPHP關(guān)聯(lián)模型操作實(shí)例分析
- ThinkPHP實(shí)例化模型的四種方法概述
- thinkphp視圖模型查詢提示ERR: 1146:Table ''db.pr_order_view'' doesn''t exist的解決方法
- 最新的php 文件上傳模型,支持多文件上傳
- PHP開發(fā)框架Laravel數(shù)據(jù)庫操作方法總結(jié)
- PHP的Yii框架中使用數(shù)據(jù)庫的配置和SQL操作實(shí)例教程
- PHP的Laravel框架結(jié)合MySQL與Redis數(shù)據(jù)庫的使用部署
- 實(shí)現(xiàn)PHP框架系列文章(6)mysql數(shù)據(jù)庫方法
- ThinkPHP框架分布式數(shù)據(jù)庫連接方法詳解
- 自制PHP框架之模型與數(shù)據(jù)庫
相關(guān)文章
PHP Laravel軟刪除的實(shí)現(xiàn)方法介紹
軟刪除就是邏輯刪除,數(shù)據(jù)保留單標(biāo)記上刪除狀態(tài),一般我們會用刪除時(shí)間來作為標(biāo)記,這樣標(biāo)記狀態(tài)有了,刪除時(shí)間也有了2022-09-09
php通過array_shift()函數(shù)移除數(shù)組第一個(gè)元素的方法
這篇文章主要介紹了php通過array_shift()函數(shù)移除數(shù)組第一個(gè)元素的方法,涉及php中array_shift()函數(shù)操作數(shù)組的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
php 出現(xiàn)Strict Standards: Only variables should be passed by r
這個(gè)問題多半是因?yàn)橐脗鬟f參數(shù)引起的,解決辦法一是修改代碼不使用引用傳遞,需要的朋友可以參考下2017-08-08
實(shí)例講解通過PHP創(chuàng)建數(shù)據(jù)庫
在本篇文章里小編給大家分享了關(guān)于如何通過​PHP創(chuàng)建數(shù)據(jù)庫的知識點(diǎn)內(nèi)容,有需要的朋友們學(xué)習(xí)下。2019-01-01
PHP move_uploaded_file() 函數(shù)(將上傳的文件移動到新位置)
這篇文章主要介紹了PHP move_uploaded_file() 函數(shù),其實(shí)就是將上傳的文件移動到新位置,需要的朋友可以參考下2018-03-03
PHP error_log()將錯(cuò)誤信息寫入一個(gè)文件(定義和用法)
PHP error_log()定義和用法,帶有二個(gè)簡單小例子加函數(shù)解釋2013-10-10
PHP實(shí)現(xiàn)的簡單AES加密解密算法實(shí)例
這篇文章主要介紹了PHP實(shí)現(xiàn)的簡單AES加密解密算法,結(jié)合具體實(shí)例形式分析了php基于mcrypt_encrypt、bin2hex、mcrypt_decrypt等方法進(jìn)行字符串加密解密的相關(guān)操作技巧,需要的朋友可以參考下2017-05-05

