相關(guān)關(guān)鍵詞
關(guān)于我們
最新文章
老生常談ThinkPHP中的行為擴(kuò)展和插件(推薦)
原理分析
將標(biāo)簽與類之間的對應(yīng)關(guān)系(如'app_init'=>array('Common\Behavior\InitHook')),通過Hook類中import或add方法,加載到Hook類中靜態(tài)變量$tags中。當(dāng)執(zhí)行Hook中靜態(tài)方法listen或者exec方法的時候(listen方法中調(diào)用了exec),實例化標(biāo)簽對應(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,'\\')) { // 插件(多個入口) $class = "Addons\\{$name}\\{$name}Addon"; }else{ // 行為擴(kuò)展(只有一個run入口方法) $class = $name.'Behavior'; $tag = 'run'; } $addon = new $class(); return $addon->$tag($params); }