亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

CodeIgniter鉤子用法實例詳解

 更新時間:2016年01月20日 11:40:54   作者:老彭  
這篇文章主要介紹了CodeIgniter鉤子用法,分析說明了CodeIgniter中鉤子的概念并結(jié)合實例形式演示了鉤子的使用技巧,需要的朋友可以參考下

本文實例講述了CodeIgniter鉤子用法。分享給大家供大家參考,具體如下:

CodeIgniter執(zhí)行流程圖中有7個橢圓的框,這表示在執(zhí)行的過程中埋了7個鉤子。那先來看看什么是鉤子?

網(wǎng)上找到的兩段文字:

鉤子的完整實現(xiàn)應該叫事件驅(qū)動。事件驅(qū)動分為兩個階段,第一個階段是注冊事件,目的是給未來可能發(fā)生的“事件”起一個名字,簡單的實現(xiàn)方法是用單例模式產(chǎn)生一個持久的對象或者注冊一個全局變量,然后將事件名稱,以及該事件對應的類與方法插入全局變量即可。也就是掛載一個鉤子。

第二個階段是觸發(fā)事件,本質(zhì)上就是在事件的全局變量中查詢要觸發(fā)的事件名稱,然后找到注冊好的類與方法,實例化并運行。這樣子就可以擺脫傳統(tǒng)方式中程序必須按順序的規(guī)則,進一步實現(xiàn)解除耦合的目的。

鉤子函數(shù)可以截獲并處理其他應用程序的消息。每當特定的消息發(fā)出,在沒有到達目的窗口前,鉤子程序就先捕獲該消息,亦即鉤子函數(shù)先得到控制權。這時鉤子函數(shù)即可以加工處理(改變)該消息,也可以不作處理而繼續(xù)傳遞該消息,還可以強制結(jié)束消息的傳遞。

可以看到:

1、鉤子函數(shù)是預設并在特定的條件下觸發(fā)的。

2、鉤子函數(shù)接管程序后可以影響到程序的走向。

CI預設鉤子

CI中設定了7個鉤子,鉤子與鉤子之間相對獨立。前3個鉤子是在實例化之前設定的,意味著無法使用get_instance實例,要使用已實例化的類需要global。7個鉤子的作用手冊上說的比較清楚了,可以重寫緩存輸出、可以對輸出進行處理等。

如何觸發(fā)CI鉤子?

CI在配置文件中設置了鉤子開關,要使用鉤子首先得打開該開關,然后配置config/hook.php中的hook數(shù)組,比如設置post_controller_constructor鉤子:

$hook['post_controller_constructor'] = array(
  'class'  => 'Hook',
  'function' => 'post_controller_constructor',
  'filename' => 'Hook.php',
  'filepath' => 'hooks',
  'params'  => array('beer', 'wine', 'snacks')
);

當控制器實例化之后,調(diào)用action之前就會觸發(fā)去執(zhí)行hooks目錄下的Hook.php中的post_controller_constructor方法。我們可以在該方法中做一些處理。

鉤子的應用

到目前為止還未體會到CI鉤子的絕妙之處,查看網(wǎng)上有一些應用CI鉤子來實現(xiàn)權限控制的程序,即在post_controller_constructor做權限判斷,由于這個鉤子就好比一個構(gòu)造函數(shù),在構(gòu)造函數(shù)里判斷接下來要執(zhí)行的方法是否有權限,確實可行。但這個功能也完全可以放在MY_Controller中去實現(xiàn),甚至會更好。因為CI的鉤子是全局的,不管是前臺還是后臺都會啟動該鉤子,雖然說這個鉤子程序可以做判斷,但這里判斷不一定是最好的。前面提到過MY_Controller中不同模塊公用控制器分開,前臺后臺繼承不同的控制器,如果我只需要對后臺進行權限控制,完全可以直接在后臺公用控制器中來實現(xiàn),不影響到前臺,只對需要的部分做控制。

這里有個非CI中的例子,思維是一樣的。合作渠道的用戶登錄注冊功能,有很多的合作方,不同的合作方需要注冊的基本資料相同,但每個合作方可能會有一些特殊的字段或者不同的校驗方式。

很多時候碰到問題我們都可以放到日常生活中來看。以注冊處理邏輯為例,可以看看其中有個流程是不變的。接受參數(shù)->注冊資料之前處理->注冊->注冊資料之后處理。變化的是什么?每一步都可能變化,但流程不變化。所以可以對前、后、處理等相關地方設置鉤子,把處理的邏輯分發(fā)到特定的情況下去,下面有個參考圖,具體的如何設置鉤子還需要根據(jù)項目來:

事實也證明這種方式是可行的,合作方雖然很多,但是也可以分組,上百個注冊頁面很容易就實現(xiàn)了。所以利用鉤子處理這種流程不變,而中間的某個步驟變化多端的需求是很方便的。

簡單點說, 鉤子就是特定條件下執(zhí)行一段程序;再簡單點,鉤子就是實現(xiàn)解除if判斷的一種方式。

過多的if判斷會導致程序難以閱讀和維護,而通過鉤子的處理可以讓程序更靈活。鉤子有一定的觸發(fā)條件,條件可以是配置、從數(shù)據(jù)庫讀取,或者通過一些技術來實現(xiàn),比如反射等,使用鉤子可以達到解耦的目的。

更多關于CodeIgniter相關內(nèi)容感興趣的讀者可查看本站專題:《codeigniter入門教程》和《CI(CodeIgniter)框架進階教程

希望本文所述對大家基于CodeIgniter框架的PHP程序設計有所幫助。

相關文章

最新評論