談PHP中的鉤子

2022-07-29 13:54:27 字數 1320 閱讀 7956

鉤子,英文為hooks。在程式中應用相當廣泛,但是究竟什麼是鉤子呢?本人介紹一下目前本人對鉤子的理解和相關心得。

假如有這麼一段程式流:

function fun()

fun函式正常的執行順序,肯定是執行完funa,然後執行funb,然後fun函式就結束了。但是,假如我們想對函式做一些變化。比如說,fun是乙個解析函式,我們希望後期可以提供豐富的解析函式,而究竟用哪個函式解析,我們希望在配置檔案中配置。這個時候就可以發揮鉤子的力量了。

我們可以在function fun(){}

中加入乙個掛鉤點h,然後再執行h這個函式之前,將鉤子函式配置好,我麼就可以根據需要來解析了。

例如:

$h=config_item("parser_fun") ;                           //從配置檔案中獲得相應的配置資訊

function fun($data)

幫助當然前提,我們得有自己的解析函式。

除此意外,php還可以根據字串提供自己的類,然後呼叫類的乙個方法,傳遞某些引數,這些就為php程式的編寫,以及後期的維護擴充套件奠定了,相當堅實的基礎。

類的實現方法,大致如下:

$c=get_class_name(); //獲得類的名字

$m=get_method_name(); //獲得方法的名字

$k=$c->$m(); //執行類的某乙個方法

鉤子在php中應用還是相當廣泛的,就目前筆者所知的codeigniter和drupal中鉤子的應用做出如下介紹:

codeigniter中鉤子的應用,主要是將所有鉤子應用給了乙個類hook類,他向開發者對ci進行擴充套件,ci提供了幾個掛鉤點,在codeigniter的整個執行過程中,加入一些開發者自己的函式,而在hook類的內部,根據外部config.php和hooks.php中的相應配置,獲得相應的類或者單獨的函式,然後執行之。當然這些類或者方法都是開發者自己寫的。這樣就可以讓開發者用的更加舒心,感覺比較舒服,畢竟每個開發者應該都想在乙個框架中加入更多的自己的東西。詳細情況可以參看codeigniter官方文件,關於鉤子的那一節:codeigniter鉤子應用.

而在drupal中鉤子的應用更是無處不在,他本身就是靠鉤子維護了乙個體系,module,block,node各個部分的實現,都是經過根本的hook函式,然後將函式名經過相應的改變,然後呼叫該函式得到了整個的hook結構,甚至於到顯示層theme的實現,都覆蓋了theme主題的api,更加令人佩服的一件事是,他居然還可以用視覺化的角度,來實現相應的theme鉤子,這樣就將主題的開發分為了開發者和設計者兩大類,設計者對視覺化更敏感,而開發者對函式更為敏感。兩者都可以從各自的角度,對drupal進行相應的改變。豈不快哉!

談PHP中的鉤子

鉤子,英文為hooks。在程式中應用相當廣泛,但是究竟什麼是鉤子呢?本人介紹一下目前本人對鉤子的理解和相關心得。假如有這麼一段程式流 function fun fun函式正常的執行順序,肯定是執行完funa,然後執行funb,然後fun函式就結束了。但是,假如我們想對函式做一些變化。比如說,fun是...

談PHP中的鉤子

鉤子,英文為hooks。在程式中應用相當廣泛,但是究竟什麼是鉤子呢?本人介紹一下目前本人對鉤子的理解和相關心得。假如有這麼一段程式流 function fun fun函式正常的執行順序,肯定是執行完funa,然後執行funb,然後fun函式就結束了。但是,假如我們想對函式做一些變化。比如說,fun是...

PHP中的鉤子是什麼?

php中的鉤子是什麼?鉤子是一種事件驅動的訊息處理機制。乙個事件,可以看作一段完成某個目的的程式。比如查詢一次資料庫,或者訪問某個 等等。事件驅動分為兩個階段,第乙個階段是註冊事件,目的是給未來可能發生的 事件 起乙個名字,簡單的實現方法是用單例模式產生乙個持久的物件或者註冊乙個全域性變數,然後將事...