CI框架之HOOKS使用流程及原理


    Ci框架中Hooks可以理解:在框架的執行流程過程中,允許開發者在固定的某些時間點上(如:調用控制器前,調用控制器后等時間點上),調用其他函數來擴充CI框架執行流程的一種方法。技術上來就是通過配置文件,調用其他函數執行;
 
1、CI框架Hooks使用:
    1.1、修改application/config/config.php文件,enable_hooks默認為FLASE,改成TRUE
    1.2、配置鈎子調用相關信息,配置文件在application/config/hooks.php;需要在改文件定義個hook(不是hooks數組,別寫錯了)數組的hooks配置信息;一個加載點可以加載多個執行函數,改成如下:
其中,class為類名,function為調用函數名,filename為文件名,filepath為文件路徑,params為參數;
    1.3、定義相應hooks調用的類文件,一般是存放在application/hooks/文件夾下面,寫法就像一般類一樣,主要類名和方法名要與hooks數組信息對應就像,如下:
    通過上述配置,系統就會調用相應的hooks;
 
2、hooks原理;
    在程序執行前,框架會加載Hooks,
    其中load_class函數會嫌判斷Hooks類是否已經加載,如果沒加載則初始化該類,Hooks構造函數如下:
,主要是判斷config是否開啟hooks,如果開啟,則加載config/hoos.php配置文件、鈎子配置信息;然后框架通過調用hooks->call方法調用hoosk,如下:
call_hook函數如下:
,hook類通過call_hook解析配置,通過hook類中run_hook調用函數,run_hook函數如下:
 
 
Hooks運行原理完畢。
 
通過上面run_hooks代碼,可以知道配置hooks有如下四種方式:
$hook['pre_system'][] = function(){}
$hook['pre_system'][] = array($object,function1)
$hook['pre_system'][] = array('class','function','filename','filepath','params')
$hook['pre_system'][] = array('function','filename','filepath','params')
 
但是有點一個疑惑,$_in_progress變量的作用,為什么會出現死循環呢?
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM