php 鈎子函數原理 解析


目前對鈎子的理解:<轉載:http://www.cnblogs.com/del/archive/2008/02/25/1080825.html>

譬如我們用鼠標在某個窗口上雙擊了一次, 或者給某個窗口輸入了一個字母 A;
首先發現這些事件的不是窗口, 而是系統!

然后系統告訴窗口: 喂! 你讓人點了, 並且是連續點了兩鼠標, 你准備怎么辦?
或者是系統告訴窗口: 喂! 有人向你家里扔磚頭了, 不信你看看, 那塊磚頭是 A.

這時窗口的對有些事件會忽略、對有些事件會做出反應:
譬如, 可能對鼠標單擊事件忽略, 窗口想: 你單擊我不要緊, 累死你我不負責;
但一旦誰要雙擊我, 我會馬上行動, 給你點顏色瞧瞧!
這里窗口准備要采取的行動, 就是我們提前寫好的事件.
用 Windows 的話說, 窗口的事件就是系統發送給窗口的消息; 窗口要采取的行動(事件代碼)就是窗口的回調函數.

但是! 往往隔牆有耳. 系統要通知給窗口的"話"(消息), 可能會被另一個家伙(譬如是一個賊)提前聽到!
有可能這個賊就是專門在這等情報的, 賊知道后, 往往在窗口知道以前就采取了行動!
並且這個賊對不同的消息會采取不同的行動方案, 它的行動方案一般也是早就准備好的;
當然這個賊也不是對什么消息都感興趣, 對不感興趣的消息也就無須制定相應的行動方案.

總結: 這個"賊"就是我們要設置的鈎子; "賊"的"行動方案"就是鈎子函數, 或者叫鈎子的回調函數.

正式開始......

假如有這么一段程序:

function fun(){
fun1();
fun2();
}

首先程序執行完fun1()之后執行fun2()然后fun()結束。

但是,假如我們想對函數做一些變化。比如說,fun是一個解析函數,我們希望后期可以提供豐富的解析函數,而究竟用哪個函數解析,我們希望在配置文件中配置。這個時候就可以發揮鈎子的力量了。

我們可以在function fun(){}中加入一個掛鈎點H,然后再執行H這個函數之前,將鈎子函數配置好,我么就可以根據需要來解析了。

例如:

$h=config_item("parser_fun") ;//從配置文件中獲得相應的配置信息
function fun($data){
global $h;
return $h();
}

除此意外,PHP還可以根據字符串提供自己的類,然后調用類的一個方法,傳遞某些參數,這些就為PHP程序的編寫,以及后期的維護擴展奠定了,相當堅實的基礎。
類的實現方法,大致如下:

$c=get_class_name(); //獲得類的名字
$m=get_method_name(); //獲得方法的名字
$k=$c->$m(); //執行類的某一個方法

 

知識是我們已知的 也是我們未知的 基於已有的知識之上 我們去發現未知的 由此,知識得到擴充 我們獲得的知識越多 未知的知識就會更多 因而,知識擴充永無止境


免責聲明!

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



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