<正文>在 PHP 中,Hook(鉤子)是一個非常常見的功能,它能夠讓你在某個點上插入自己的代碼,以此來實現某個功能或者改變程序的流程,這個概念也應用到了 CodeIgniter 框架中。
CodeIgniter 提供了鉤子系統(Hooks System),是供開發人員在程序執行過程中“掛鉤”(相當于插入)自己的代碼,以此來實現某些特定的功能。鉤子系統運用簡單,只需要定義自定義鉤子函數,即可在指定位置執行。
下面,我會用幾個例子來詳細介紹 CodeIgniter 中的鉤子系統。
例一:在執行控制器函數前執行鉤子
假設我們要在控制器的某個方法執行前記錄下當前時間。這個需求比較簡單,用鉤子就可以很快地解決。
1. 在 config 文件夾下的 config.php 文件中開啟鉤子功能:
$config[‘enable_hooks’] = TRUE;
2. 在 config 文件夾下的 hooks.php 文件中設置當要執行控制器方法前要執行的鉤子函數:
$hook[‘pre_controller’] = array( ‘class’ =>‘MyClass’, ‘function’ =>‘MyMethod’, ‘filename’ =>‘Myclass.php’, ‘filepath’ =>‘hooks’ );
上面的代碼中,’pre_controller’ 是 CI 鉤子的一個特定點,代表在執行控制器之前執行的鉤子函數。MyClass 和 MyMethod 是要執行的類和方法, hooks 文件夾中要自己定義一個 MyClass.php 文件作為這個類的定義。
3. 在 hooks 文件夾下新建 MyClass.php 文件,文件內容如下:
class MyClass {
function MyMethod() {
echo "Hello, CI Hooks! ";
echo date('Y-m-d H:i:s');
}
}
這樣,每次執行控制器的方法時,$hook[‘pre_controller’] 中設置的鉤子函數都會首先執行。在上面的例子中,我們只是簡單地輸出了一個“Hello, CI Hooks!”和當前時間,實際應用中,我們可能會用這個鉤子記錄下用戶行為。
例二:使用可配置鉤子
上面的例子我們是直接在文件中設置鉤子類和方法的,而 CodeIgniter 還提供了一種可以通過配置文件里設置鉤子類和方法的方法。這個方法比上面那個例子更優雅,因為我們可以在不改變源碼的情況下更方便地進行修改和管理。
1. 在 config 文件夾下的 hooks.php 文件中修改:
$hook[‘pre_controller’][] = array(
‘class’ =>‘Someclass’,
‘function’ =>‘Somefunction’,
‘filename’ =>‘Someclass.php’,
‘filepath’ =>‘hooks’,
‘params’ =>array(‘beer’, ‘wine’, ‘snacks’)
);
2. 在 hooks 文件夾下新建 Someclass.php 文件,文件內容如下:
class Someclass {
function Somefunction($param1, $param2, $param3) {
echo "Here’s your {$param1} and {$param2}, enjoy!";
echo "Would you like some {$param3} to go with that?";
}
}
可以看到,這個鉤子函數除了輸出了一個字符串以外,還使用了一些參數,這些參數可以在 hook 數組的 ‘params’ 鍵中設置。
總結
CI 鉤子功能雖然是一個比較古老的功能了,但是它在日常軟件開發中還是有著非常重要的作用的。CodeIgniter 提供了豐富的鉤子功能,非常靈活,可以自定義鉤子,也可以針對不同的節點做不同的鉤子,其靈活性與易擴展性都是非常好的。
還有很多細節可以深入學習,上面只是簡要介紹了一下,希望讀者們能為自己的項目加入 Hook 功能,來提高項目的擴展性。
上一篇php ci email
下一篇php ci input