通過之前我們的分析,我們已經把安裝流程搞定可,本篇開始,我們分析前台相關的流程。
我們又一次回到了index.php
在第一篇說完前幾行判斷是否安裝之後,我們就暫時離開了這個檔案,當我們安裝完以後,進入首頁就又回到了這裡,我們跳過判斷安裝那一塊,直接看後面。
/** 初始化元件 */
typecho_widget:
:widget
('widget_init');
/** 註冊乙個初始化外掛程式 */
typecho_plugin:
:factory
('index.php')-
>
begin()
;/** 開始路由分發 */
typecho_router:
:dispatch()
;/** 註冊乙個結束外掛程式 */
typecho_plugin:
:factory
('index.php')-
>
end(
);
別看只有4行,卻是大量的精髓都在這邊,我們一行一行看。
第一行,初始化元件,我們進入**
/**
* 工廠方法,將類靜態化放置到列表中
** @access public
* @param string $alias 元件別名
* @param mixed $params 傳遞的引數
* @param mixed $request 前端引數
* @param boolean $enableresponse 是否允許http回執
* @return typecho_widget
* @throws typecho_exception
*/public
static
function
widget
($alias
,$params
=null
,$request
=null
,$enableresponse
=true)if
(!isset
(self:
:$_widgetpool
[$alias])
)/** 初始化request */if(
!empty
($request))
else
/** 初始化response */
$responseobject
=$enableresponse
? typecho_response:
:getinstance()
: typecho_widget_helper_empty:
:getinstance()
;/** 初始化元件 */
$widget
=new
$classname
($requestobject
,$responseobject
,$params);
$widget
->
execute()
; self:
:$_widgetpool
[$alias]=
$widget;}
return self:
:$_widgetpool
[$alias];
}
先看第乙個引數$alias
第一步把傳入的變數利用@
拆分成兩個變數,乙個是要初始化的類名,另乙個是個別名,如果沒有別名的設定,雷德明就是別名。 然後在判斷別名池裡面有沒有這個別名,如果包含了這個別名,類名就變成別名池設定的類名。這個別名池,在這個類下的alias
方法中可以設定,當前這個方法貌似沒有使用。
繼續下去,如果元件池裡面沒有這個例項,就要初始化這個類,先初始化了,request
,初始化的時候,會把get
和pos
t 引數,設定到request
的$_widgetalias
裡面。然後呼叫了request
的setparams
把widget
方法傳入的params
引數傳入,這個方法,會把params
設定到request
的_params
裡面。當然,如果傳入的request
引數不是空,則會獲取已經存在的request
,不過request
的getinstance
方法中不存在request
例項的話,也會重新初始化一下。
緊接著會根據$enableresponse
是否為true
決定,是建立resposne
或者typecho_widget_helper_empty
。typecho_widget_helper_empty
這個類,我們後面再說。
最後,初始化我們傳入的class
,並且執行execute
方法。最後把class
例項,放入到元件池當中,並且把元件返回。
好了,現在我們說說初始化的widget_init
類。這個類繼承了typecho_widget
類,這個類是個元件根類,這裡面封裝了不少資料結構,以及request
、response
之類的東西,這個類,我們在後面用到的時候分別來說再說。初始化typecho_widget
的時候,會傳入request
、resposne
、$params
。request
、resposne
會賦值給例項的request
、resposne
。緊接著初始化了typecho_config
, 這個類就當做陣列看就行了。再把$params
呼叫給typecho_config
的setdefault
方法,設定初始值。
緊接著我們看看widget_init
類的execute
方法。這裡面方法也很複雜,我們下期再說。
uboot原始碼分析(3)
正式開始了第二階段 relocate部分的 負責把u boot stage2的 從flash儲存器載入到記憶體,如下 163 ifndef config skip relocate uboot 164relocate 165 adr r0,start 獲取當前 存放位址 00000000 166 l...
android adb原始碼分析 3
本篇分析fdevent.c的源 這個源 檔案的工作時建立 監聽和處理讀寫事件。static fdevent fd table 0 static int fd table max 0 fd table儲存的是以fdevent fd為索引儲存的fdevent指標,即 the fdevent的值等於fd ...
LinkedList原始碼分析3
今天完成剩餘的api 返回值方法 含義boolean offer e e 將指定的元素新增為此列表的尾部 最後乙個元素 boolean offerfirst e e 在此列表的前面插入指定的元素 boolean offerlast e e 在該列表的末尾插入指定的元素 epoll 檢索並刪除此列表的...