相關(guān)關(guān)鍵詞
關(guān)于我們
最新文章
- PHP中opcode緩存簡(jiǎn)單用法分析
- thinkPHP控制器變量在模板中的顯示方法示例
- PHP move_uploaded_file() 函數(shù)(將上傳的文件移動(dòng)到新位置)
- dirname(__FILE__)的含義和應(yīng)用說(shuō)明
- thinkPHP5框架實(shí)現(xiàn)分頁(yè)查詢功能的方法示例
- PHP中單雙號(hào)與變量
- PHP獲得當(dāng)日零點(diǎn)時(shí)間戳的方法分析
- Laravel ORM對(duì)Model::find方法進(jìn)行緩存示例詳解
- PHP讀寫(xiě)文件高并發(fā)處理操作實(shí)例詳解
- 【CLI】利用Curl下載文件實(shí)時(shí)進(jìn)度條顯示的實(shí)現(xiàn)
老生常談ThinkPHP中的行為擴(kuò)展和插件(推薦)
原理分析
將標(biāo)簽與類之間的對(duì)應(yīng)關(guān)系(如'app_init'=>array('Common\Behavior\InitHook')),通過(guò)Hook類中import或add方法,加載到Hook類中靜態(tài)變量$tags中。當(dāng)執(zhí)行Hook中靜態(tài)方法listen或者exec方法的時(shí)候(listen方法中調(diào)用了exec),實(shí)例化標(biāo)簽對(duì)應(yīng)的類,調(diào)用相應(yīng)的方法(如果是插件,調(diào)用傳遞的方法,如果是行為,調(diào)用run方法)。
Hook中exec方法定義如下:
static public function exec($name, $tag,&$params=NULL) { if(false === strpos($name,'\\')) { // 插件(多個(gè)入口) $class = "Addons\\{$name}\\{$name}Addon"; }else{ // 行為擴(kuò)展(只有一個(gè)run入口方法) $class = $name.'Behavior'; $tag = 'run'; } $addon = new $class(); return $addon->$tag($params); }