1、core 系統核心**
2、database資料庫相關的操作和幫助類
3、helpers 系統提供的一些工具類
4、language 語言包
5、libraries 系統依賴類
我們初次訪問ci的時候進入的welcome頁面,那麼這個welcome的頁面請求都經過了哪些地方呢,我們來追蹤一下。
所以對ci的請求,都是首先進入index.php檔案。在index.php檔案中進行ci框架的初始化操作,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
define(
'environment'
, isset(
$_server
[
'ci_env'
]) ?
$_server
[
'ci_env'
] :
'development'
);
define(
'self'
,
pathinfo
(
__file__
, pathinfo_basename));
define(
'basepath'
,
$system_path
);
define(
'fcpath'
, dirname(
__file__
).directory_separator);
define(
'sysdir'
,
basename
(basepath));
define(
,
.directory_separator);
define(
'viewpath'
,
$view_folder
.directory_separator);
require_once
basepath.
'core/codeigniter.php'
;
在index.php檔案中定義了必要的全域性變數,最後引入了core/codeigniter.php核心類。那我們追蹤到core/codeigniter.php中,檔案中首先引入了:
1
2
3
require_once
'config/constants.php'
);
require_once
(basepath.
'core/common.php'
);
之後又例項化了 benchmark、hooks、config、log、utf8、uri、router、output、security、input、lang 類,引入是呼叫common.php中的load_class方法實現的。
1
2
3
$class
= ucfirst(
$rtr
->
class
);
$method
=
$rtr
->method;
在路由中提取出對應要呼叫的class和method,然後例項化class且呼叫方法:
1
2
3
$ci
=
new
$class
();
call_user_func_array(
array
(&
$ci
,
$method
),
$params
);
其前後呼叫了四個鉤子:
1
2
3
4
5
6
7
$ext
->call_hook(
'pre_controller'
);
$ext
->call_hook(
'post_controller_constructor'
);
$ext
->call_hook(
'post_controller'
);
$ext
->call_hook(
'post_system'
);
12
3
4
5
public
function
index()
簡單的 載入模板方法,我們看到welcome 類繼承自父類:ci_controller
我們進入ci_controller類中檢視:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public
function
__construct()
$this
->load =& load_class(
'loader'
,
'core'
);
$this
->load->initialize();
log_message(
'info'
,
'controller class initialized'
);
}
這段建構函式是將,在引導類codeigniter.php被例項化化的類賦值到本地類變數中,以構造乙個超級物件被使用。同時實現了乙個單例 公外部呼叫。
那是如何賦值的那,這裡呼叫了 common類 中的is_loader()方法。其實就是返回的我們在上面
呼叫load_class()載入過的類:
最後初始化成功後,會執行codeigniter.php檔案中的:
1
call_user_func_array(
array
(&
$ci
,
$method
),
$params
);
這個函式,從而進入我們welcome控制器的index方法。
大致的流程就是如此,可以根據自己的想法去實現功能,開發有意思的功能模組!!!!
CI框架原始碼研讀 整體架構
部落格搬家 有人說phper的深入要從研讀mvc框架開始,我跳了乙個常用的ci框架入手,一是因為 ci框架簡單輕巧,二是原來用的最多的就是ci框架了。1 core 系統核心 2 database資料庫相關的操作和幫助類 3 helers 系統提供的一些工具類 4 language 語言包 5 lib...
jquery原始碼 整體架構
對外提供了jquery。可以通過jquery或者 來找到jquery function window,undefined window.jquery window.jquery 對外介面 window jquery本身是乙個建構函式,包括了很多靜態方法 工具方法 和例項方法。靜態方法更底層。func...
WebX原始碼研讀
webx是公司應用最為廣泛的web框架,目前已經開源。一直以為webx是基於spring mvc的,但其實並不是,那麼不同之處到底在何處,又是為什麼這樣實現?看過了原始碼,在這裡梳理下思路 我以為,在業務層面上來講web框架解決的核心事情是web請求處理,那麼下面就從這個主線出發來看看這個框架是怎麼...