我對php的mvc的一些理解,以及自己寫的框架

2021-09-30 06:23:58 字數 2992 閱讀 3537

最近想學習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 作業系統讀取硬碟的時候,不會乙個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次...