thinkphp鉤子是什么意思

thinkphp鉤子是什么意思

首先,鉤子是一種觸發機制,如同一個陷阱,當程序運行到某個地方時就會觸發這個陷阱,然后執行這個hook,執行完成后,系統根據執行的不同結果繼續進行

那么,thinkphp鉤子(Hook)機制的原理是什么呢?

1、框架在ThinkThink->start()方法中調用Hook類中的import方法批量加載模式行為:默認為Modelcommon.php中的配置文件,該文件定義行為擴展

thinkphp鉤子是什么意思

2、通過Hook:listen()方法監聽tag標記的行為.Hook類中定義一個數組tags:tag為key;Behavior行為是value.通過Hook:exec()執行該標記的行為插件

立即學習PHP免費學習筆記(深入)”;

?/** ?????*?監聽標簽的插件 ?????*?@param?string?$tag?標簽名稱 ?????*?@param?mixed?$params?傳入參數 ?????*?@return?void ?????*/ ????static?public?function?listen($tag,?&$params=NULL)?{ ????????if(isset(self::$tags[$tag]))?{ ????????????if(APP_DEBUG)?{ ????????????????G($tag.'Start'); ????????????????trace('[?'.$tag.'?]?--START--','','INFO'); ????????????} ????????????foreach?(self::$tags[$tag]?as?$name)?{ ????????????????APP_DEBUG?&&?G($name.'_start'); ????????????????$result?=???self::exec($name,?$tag,$params); ????????????????if(APP_DEBUG){ ????????????????????G($name.'_end'); ????????????????????trace('Run?'.$name.'?[?RunTime:'.G($name.'_start',$name.'_end',6).'s?]','','INFO'); ????????????????} ????????????????if(false?===?$result)?{ ????????????????????//?如果返回false?則中斷插件執行 ????????????????????return?; ????????????????} ????????????} ????????????if(APP_DEBUG)?{?//?記錄行為的執行日志 ????????????????trace('[?'.$tag.'?]?--END--?[?RunTime:'.G($tag.'Start',$tag.'End',6).'s?]','','INFO'); ????????????} ????????} ????????return; ????}  ????/** ?????*?執行某個插件 ?????*?@param?string?$name?插件名稱 ?????*?@param?string?$tag?方法名(標簽名)????? ?????*?@param?Mixed?$params?傳入的參數 ?????*?@return?void ?????*/ ????static?public?function?exec($name,?$tag,&$params=NULL)?{ ????????????if('Behavior'?==?substr($name,-8)?){ ????????????//?行為擴展必須用run入口方法 ????????????$tag????=???'run'; ????????} ????????$addon???=?new?$name(); ????????return?$addon->$tag($params); ????}

以上內容僅供參考!

推薦教程:thinkphp教程

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享