Typecho 原始碼分析(3)

2021-09-29 14:01:27 字數 3278 閱讀 3853

通過之前我們的分析,我們已經把安裝流程搞定可,本篇開始,我們分析前台相關的流程。

我們又一次回到了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,初始化的時候,會把getpost 引數,設定到request$_widgetalias裡面。然後呼叫了requestsetparamswidget方法傳入的params引數傳入,這個方法,會把params設定到request_params裡面。當然,如果傳入的request引數不是空,則會獲取已經存在的request,不過requestgetinstance方法中不存在request例項的話,也會重新初始化一下。

緊接著會根據$enableresponse是否為true決定,是建立resposne或者typecho_widget_helper_emptytypecho_widget_helper_empty這個類,我們後面再說。

最後,初始化我們傳入的class,並且執行execute方法。最後把class例項,放入到元件池當中,並且把元件返回。

好了,現在我們說說初始化的widget_init類。這個類繼承了typecho_widget類,這個類是個元件根類,這裡面封裝了不少資料結構,以及requestresponse之類的東西,這個類,我們在後面用到的時候分別來說再說。初始化typecho_widget的時候,會傳入requestresposne$paramsrequestresposne會賦值給例項的requestresposne。緊接著初始化了typecho_config, 這個類就當做陣列看就行了。再把$params呼叫給typecho_configsetdefault方法,設定初始值。

緊接著我們看看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 檢索並刪除此列表的...