有關PHP中MVC的個人見解_PHP教程

來源:互聯網
上載者:User
經過近一個月對MVC的研究,自己也通過網上有朋友的指導,有了一套自己的MVC流程及架構,但是感覺缺限還是很多,靈活性方面還是欠缺,但又不知道怎麼樣的具體改進,今天我就把我的流程及思想發布,希望有高人能夠指點指點。
一、入口
入口檔案可以是單檔案也可以是多檔案,我現在用的基本屬多檔案,但是入口檔案內容基本都是一樣,為以後的修改其它的入口方式做基礎,
1 2 require 'command/config.php';
3 require 'command/app.php';
4 app::run($config);
5 ?>
首先不用說大家也看得出來,載入系統設定檔,然後通過引擎來載入系統配置。
二、引擎

1 public function run($config){
2 header("Content-type:text/html;charset=utf-8");
3 self::$config = $config; //載入系統配置
4 self::copyright();
5 self::testsystem(); //系統內容
6 self::setsystem(); //設定系統參數
7 self::incinfo();
8 if(!IN_WEB){exit('網站正關閉維護中,請稍候訪問!');}
9 defined('KEHENG_DEBUG') or define('KEHENG_DEBUG',true); // 是否偵錯模式
10
11 self::setpath(); //設定系統路徑
12 self::getdatabase(); //測試資料庫
13 self::loadlib(); //載入庫
14 self::getRouteConfig(); //運行路由並載入控制器
15 }

引擎裡面首先設定設定檔,再測試系統參數,載入系統模組,取得配置在的網站資訊檔,設定網站需要的路徑,測試系統配置裡面的資料庫參數,載入庫檔案,最後是載入路由擷取請求地址。不知道這樣的流程對不對,只是我根據自己的學習自己編寫的一套而已,但裡面卻缺少緩衝,具體緩衝應該怎麼樣的設定。
這裡的資料庫測試是根據配置用哪一類型的資料庫,再載入對該類型資料庫操作的封裝檔案。
三、路由
以下為上面的最後一個函數,載入控制器檔案,根據設定檔獲得請求方式。

1 public function getRouteConfig(){
2 $route_type=self::$config[route][url_type];
3 switch($route_type){
4 case 1:
5 //echo $_SERVER['SCRIPT_NAME'].'
';
6 $query_string=$_SERVER['QUERY_STRING'];
7 //echo $_SERVER['REQUEST_URI'].'
';
8 $urlstr=$_GET['controller'];
9 break;
10 case 4:
11 $url = end(explode('/', $_SERVER["PHP_SELF"]));
12 $urlstr = strtolower(substr($url,0,-4));
13 break;
14
15 }
16 if(file_exists(Contr_DIR.'Controller.php')){
17 require Contr_DIR.'Controller.php';
18 //echo $urlstr;
19 $template = self::$config['Templates'];
20 controller::load($urlstr,$template);
21 }else{
22 exit('控制器檔案不存在');
23 }
24
25 }

四、控制器
控制器檔案也蠻簡單,只是根據路由分析出的地址來載入模型檔案和視圖檔案,

1 class controller{
2 public $obj;
3 public function load($url,$template){
4
5 $config=$template;
6 if(file_exists(Model_DIR.$url.'.model.php')){
7 $views = new views;
8 //echo Model_DIR.$url.'.model.php';
9 require Model_DIR.$url.'.model.php';
10 $temp = $config[$url][0];
11 if($temp!='' && $temp!=null && isset($temp)){
12 if(file_exists(Templ_DIR.$temp)){
13 //echo Templ_DIR.$temp;
14 require Templ_DIR.$temp;
15 }else{
16 exit('視圖檔案不存在!'.$temp);
17 }
18 }else{
19 exit('此頁未設定顯示模板!'.$temp);
20 }
21 unset($views);
22 }else{
23 exit('模型檔案不存在:'.$url.'.model.php');
24 }
25 }
26 }

但裡面有個注意的是模型檔案裡面需要輸出的資料全部都是通過views這樣一個類進行輸出,包裡視圖檔案裡面所有的系統參數等。不知道,這種方法是不是顯示得多此一舉,原來是想把所有要輸出的資料進行封裝。

其它的模板檔案也都是用類進行了封裝,具體怎麼寫高人應該都知道了吧,這些只是我的個人見解,但是緩衝應該怎麼寫,現在還是一個模糊的概念,是不是在讀取資料的時候,方嚮應該是讀取緩衝,然後再判斷緩衝是否存在,再判斷是否需要建立緩衝呢?具體操作方法還是不是很明白。希望能有高人指點指點。


摘自 九狐科技

http://www.bkjia.com/PHPjc/478233.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/478233.htmlTechArticle經過近一個月對MVC的研究,自己也通過網上有朋友的指導,有了一套自己的MVC流程及架構,但是感覺缺限還是很多,靈活性方面還是欠缺,...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.