有關PHP中MVC的開發經驗分享_php技巧

來源:互聯網
上載者:User
一、入口
入口檔案可以是單檔案也可以是多檔案,我現在用的基本屬多檔案,但是入口檔案內容基本都是一樣,為以後的修改其它的入口方式做基礎,
複製代碼 代碼如下:

<?php
require 'command/config.php';
require 'command/app.php';
app::run($config);
?>

首先不用說大家也看得出來,載入系統設定檔,然後通過引擎來載入系統配置。
二、引擎
複製代碼 代碼如下:

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

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

public function getRouteConfig(){
$route_type=self::$config[route][url_type];
switch($route_type){
case 1:
//echo $_SERVER['SCRIPT_NAME'].'<br />';
$query_string=$_SERVER['QUERY_STRING'];
//echo $_SERVER['REQUEST_URI'].'<br />';
$urlstr=$_GET['controller'];
break;
case 4:
$url = end(explode('/', $_SERVER["PHP_SELF"]));
$urlstr = strtolower(substr($url,0,-4));
break;
}
if(file_exists(Contr_DIR.'Controller.php')){
require Contr_DIR.'Controller.php';
//echo $urlstr;
$template = self::$config['Templates'];
controller::load($urlstr,$template);
}else{
exit('控制器檔案不存在');
}
}

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

class controller{
public $obj;
public function load($url,$template){
$config=$template;
if(file_exists(Model_DIR.$url.'.model.php')){
$views = new views;
//echo Model_DIR.$url.'.model.php';
require Model_DIR.$url.'.model.php';
$temp = $config[$url][0];
if($temp!='' && $temp!=null && isset($temp)){
if(file_exists(Templ_DIR.$temp)){
//echo Templ_DIR.$temp;
require Templ_DIR.$temp;
}else{
exit('視圖檔案不存在!'.$temp);
}
}else{
exit('此頁未設定顯示模板!'.$temp);
}
unset($views);
}else{
exit('模型檔案不存在:'.$url.'.model.php');
}
}
}

但裡面有個注意的是模型檔案裡面需要輸出的資料全部都是通過views這樣一個類進行輸出,包裡視圖檔案裡面所有的系統參數等。不知道,這種方法是不是顯示得多此一舉,原來是想把所有要輸出的資料進行封裝。
其它的模板檔案也都是用類進行了封裝,具體怎麼寫高人應該都知道了吧,這些只是我的個人見解,但是緩衝應該怎麼寫,現在還是一個模糊的概念,是不是在讀取資料的時候,方嚮應該是讀取緩衝,然後再判斷緩衝是否存在,再判斷是否需要建立緩衝呢?具體操作方法還是不是很明白。希望能有高人指點指點。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.