PHP的鉤子實現解析

2021-07-25 22:31:24 字數 1831 閱讀 5017

php程式設計的鉤子實現,示例講解和解釋它們的作用,寫了乙個樣板的鉤子實現

鉤子是程式設計裡乙個常見的概念,非常的重要。它使得系統變得非常容易拓展(而不用理解其內部的實現機理,這樣可以減少很多任務作量)。只要有乙個鉤子樣本,能很容易仿照第乙個鉤子快速的編寫第二個鉤子,這裡對鉤子進行乙個簡單的理解。

下面是乙個最簡單的**例子:

<?php

class

test

}test::example();

瀏覽器執行測試輸出:

我是乙個鉤子測試

hello

array

( [0] => 1

[1] => 2

[2] => 3

[3] => 4

[4] => 5

[5] => 6

)

乙個test類裡面,寫了乙個example方法。本來這個example的方法非常簡單,就是輸出hello,但是在這之前,我們還有其他的事情要做(這裡我假定在輸入hello之前,有乙個字串要輸出,並且在之後有個陣列要輸出)。

我們現在有2種寫法:

第一:直接在方法裡實現我們需要的功能(就像上面**那樣)

但是這種方式有個問題,就是我們每次更改系統,都需要去更改系統的核心部分(我們假定test是系統的核心部分),這樣會需要我們每次改動都要跳到類test內部去改動,開發成本非常大,而且**全部在一起非常不好維護。

第二:我們封裝乙個execute方法

function

execute

($params)

else

}

這樣我們實現的時候,方便了很多,test類可以簡化成:

class

test

}

但是現在仍然有個問題,我們改動的時候,仍然要去系統內部改動(如果是簡單的陣列和字串,是可以進行配置,但是如果是複雜的邏輯處理,配置行不通)。

我們想寫乙個類(通過這個類,向系統傳送訊息的時候,系統可以直接呼叫我們的類,而且我們的類只要遵循一定的規則來設計,就和原系統是相容的)。

做了改進設計出如下鉤子格式:

<?php

/** * 鉤子類

*/class

hook

else

if($type == 'string')elseif($type == 'arr')

}}class

test

}我們只要改動乙個外部的hello類,就可以實現對系統內部的控制了

class

hello

public

function

arr()

}test::example();

從上面可以看出,組成乙個單獨的類,系統的內部固定了後,外部可以寫各種類,進行鉤子的實現。現在寫了乙個hello類,假如需要拓展乙個world類,同樣可以僅僅改動hook,而不用去改動test內部,只要我們定義乙個抽象類:

abstract

class

lan

然後讓所有的拓展類,比如hello類或者world類繼承這個抽象類,就可以直接寫個擴充套件。

VC 鉤子實現及應用

關於鉤子 請參見微軟中國社群中 hook專題 一文。純c 鉤子 hook 實現 要實現系統鉤子其實很簡單,呼叫三個win32的api即可。setwindowshookex用於設定鉤子。設立一道卡子,盤查需要的資訊 dllimport user32.dll callingconvention call...

CBT鉤子實現解決程式間的衝突

可能在執行乙個程式 a時,將執行的程式與正在執行的某個程式 b衝突。下面用乙個 cbt鉤子實現當乙個程式 a啟動時,關閉與本程式衝突的其它程式b。1 首先寫乙個動態鏈結庫 cbthooks 它實現乙個全域性 cbt鉤子監視程式 a的啟動 實際上是監視程式 a中某視窗類的建立 2 建立乙個名為 tes...

C 利用全域性鉤子實現鍵盤鎖

在家看網課,記筆記不方便。於是就想弄個鍵盤鎖,方便學習 在寢室也好把外接鍵盤放上去打遊戲 其實這東西挺簡單的,就三行 hhook hk lresult callback kbproc intncod,wparam wparam,lparam lparam void void lresult call...