最近想學習php的mvc結構,在網上找了一些資料,可是大部分都是相同的,或者寫的不是很滿意。接著看了乙個cakephp的框架,感覺太多的函式了,讓人覺得就是乙個記函式的過程,所以覺得不是很好。
我對mvc的理解是:c負責分配任務,協調m和v。使用者發出請求時,c把請求分配給模型m,模型從資料庫處理查詢或者其他的一些資料操作,然後把資料返回給c,c再把資料傳遞給相應的v,再在前台顯示。這有個比喻較好,當我們去餐館吃飯時,招待小姐就相當於c,她把客戶的請求傳達給廚師m,廚師把做好的菜再給小姐,小姐把菜再端給顧客。。。。。。。
現在我把自己的做的乙個mvc介紹下:
其中controller是控制器的名字,action是控制器下的動作名稱,而action以後的引數,如id:2,page:3等是額外的引數,我們稱之為params。
好了,接下來就是怎麼解析這個url,把它分化成controller,action,params。
首先說一下目錄結構,
index.php 這是入口檔案,使用者要訪問的每乙個頁面都要經過它
.htaccess 這是.htaccess檔案
core 核心檔案目錄
core/ini.php 初始化處理
core/config.php 一些配置檔案
core/dbconfig.php 資料庫的配置檔案
core/dispatcher.php 分發路由
core/router.php url處理檔案
core/loader.php
core/initializer.php 包含一些檔案
core/lib
core/lib/dataaccess.php 資料庫的一些基本操作
core/lib/smarty smary的核心檔案,完全照搬smarty的libs檔案,但將其中的smarty.class.php重新命名為smarty.php,主要是為了自動化類。
以上就是要用到的目錄檔案
下面看index.php
//index,php
<?php
include("core/ini.php");
initializer::initialize();
$router = loader::load("router");
dispatcher::dispatch($router);
?>
先慢慢解釋。。。。。。。。。。
看ini.php
<?php
header("content-type:text/html;charset=utf-8");
set_include_path(get_include_path() . path_separator . "core");
//將要用到的檔案包含進來
function __autoload($object).php");
}?>
其中__autoload函式很重要,當我們要初期化類時,如果當前檔案沒有,它就會自動去包含檔案中尋找該類。在這裡我把類名和檔名設為相同,這比較方便,比如initializer::initialize();此時就會去包含檔案中查詢initializer.php檔案,然後初始化類initializer,再呼叫它的靜態方法initialize();
接著看看initializer.php
<?php
class loader
' to load");
}if (empty(self::$loaded[$object]))
return self::$loaded[$object];}}
?>
<?php
class router
$route= $path[0];
$this->route = $route;
$routeparts =preg_split("",$route);//用「/"劃分進陣列
$this->controller=$routeparts[0];//控制器名稱
$this->action=isset($routeparts[1])? $routeparts[1]:"index";//動作名稱,預設是index
array_shift($routeparts);
array_shift($routeparts);
$a=$routeparts;
$b=array();
foreach($a as $aa)
$this->params=$b;//此時為陣列的形式array ( [id] => 2 [page] => 3 )
}public function getaction()
public function getcontroller()
public function getparams()
}?>
再看看dispatcher.php
下面看看index控制器怎麼樣
$this->view->assign('test','hello,world!');
$this->view->display('index.tpl');}}
?>
這裡負責一些資料庫的鏈結操作,其中dbconfig.php為
<?php
define('db_host','127.0.0.1');
define('db_user','root');
define('db_password','min');
define('db_database','sdw');
define('char_set','utf8');
?>
此時訪問:就可以看到輸出結果了」hello,world!"
我對CPPUNIT的一些理解
一 測試用例 1 cppunit通常用於介面測試,如果進行路徑測試,需要考慮一些特殊問題,因為可能需要訪問被測類的保護或者私有成員。在這種情況下,可以考慮使用輔助類,輔助類從被測類派生,並將測試類宣告為友元。2 測試類從testfixture派生,該類宣告了setup teardown 函式,分別進...
php 對PHPExcel一些簡單的理解
這裡有關於excel檔案的幾個概念需要跟大家說明一下,這幾個概念對於我們的後續程式設計是很有幫助的 1.工作簿 在excel環境中用來儲存資料並處理資料的檔案,又稱為excel檔案或excel文件,在乙個工作簿中,可以擁有多張不同型別的工作表,無論有多少張工作表,在將其儲存時,都將會儲存在乙個工作簿...
對Linux inode的一些理解
檔名 inode device block 一 inode是什麼?理解inode,要從檔案儲存說起。檔案儲存在硬碟上,硬碟的最小儲存單位叫做 扇區 sector 每個扇區儲存512位元組 相當於0.5kb 作業系統讀取硬碟的時候,不會乙個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次...