這篇文章主要為大家展示了“CI框架之如何使用Hook.php文件完成功能擴(kuò)展”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“CI框架之如何使用Hook.php文件完成功能擴(kuò)展”這篇文章吧。
具體如下:
看了hook.php的源碼,就知道CI使用hook來(lái)進(jìn)行擴(kuò)展的原理了。
CI中hook的使用經(jīng)歷了一個(gè):開(kāi)啟hook,定義hook,調(diào)用hook,執(zhí)行hook的過(guò)程。
手冊(cè)中已經(jīng)告知了開(kāi)啟、定義、調(diào)用的方法。那么hook的實(shí)現(xiàn)原理是啥呢。
hooks; var $in_progress = FALSE; //當(dāng)一個(gè)hook執(zhí)行的時(shí)候,會(huì)給標(biāo)記 $in_process = TRUE ,是為了防止同一個(gè)hook被同時(shí)調(diào)用。 function __construct() { $this->_initialize(); log_message('debug', "Hooks Class Initialized"); } function _initialize() { //初始化hook //判斷config.php中是否開(kāi)啟hook //include(hook.php),將文件里定義的hook數(shù)組引用到$this->hooks //$this->enable = TRUE } function _call_hook($which = '')//pre_system { //以pre_system掛鉤點(diǎn)為例,當(dāng)調(diào)用_call_hook('pre_system')時(shí) //確保$this->enable = TRUE && 定義了$this->hooks['pre_system'] //如果是二維數(shù)組就遍歷,依次_run_hook($this->hooks['pre_system'][$val]) //如果是一維數(shù)組,那么直接_run_hook($this->hooks['pre_system']) } function _run_hook($data) //$data 是傳遞過(guò)來(lái)的hook數(shù)組 { //$data 就是我們?cè)贏PPPATH/config/hook.php 定義的hook數(shù)組 //$hook['pre_controller'] = array( // 'class' => 'MyClass', // 'function' => 'Myfunction', // 'filename' => 'Myclass.php', // 'filepath' => 'hooks', // 'params' => array('beer', 'wine', 'snacks') // ); //取出data里面的數(shù)據(jù),加載 APPPATH.$data['filepath'].$data['filename']; //實(shí)例化鉤子類,調(diào)用function。應(yīng)用到示例中就是 $this->in_process = TRUE; $Hook = new MyClass(); $Hook->Myfunction($params); $this->in_process = FALSE; } } ?>
掛鉤點(diǎn)可以掛多個(gè)hook,所以,當(dāng)我們想擴(kuò)展ci的時(shí)候,只需要將hook文件放到APPPATH文件夾下,然后 到APPPATH/config/hook.php中聲明定義的hook的信息即可。那么系統(tǒng)運(yùn)行到掛鉤點(diǎn)的時(shí)候,會(huì)自動(dòng)調(diào)用聲明的hook。
以上是“CI框架之如何使用Hook.php文件完成功能擴(kuò)展”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!