對"鉤子"這個概念其實不熟悉,最近看到乙個php框架中用到這種機制來擴充套件專案,所以大概來了解下。
hook外掛程式機制的基本思想:
在專案**中,你認為要擴充套件(暫時不擴充套件)的地方放置乙個鉤子函式,等需要擴充套件的時候,把需要實現的類和函式掛載到這個鉤子上,就可以實現擴充套件了。
思想就是這樣聽起來比較籠統,看乙個網上的實現的例子。
整個外掛程式機制包含三個部分:
1.hook外掛程式經理類:這個是核心檔案,是乙個應用程式全域性global物件。它主要有三個職責
1>監聽已經註冊了的所有外掛程式,並例項化這些外掛程式物件。
2>註冊所有外掛程式。
3>當鉤子條件滿足時,觸發對應的物件方法。
2.外掛程式的功能實現:這大多由第三方開發人員完成,但需要遵循我們(經理類定義)的規則,這個規則是外掛程式機制所規定的,因外掛程式機制的不同而不同。
3.外掛程式的觸發:也就是鉤子的觸發條件。這是一小段**,放置在你需要呼叫外掛程式的地方,用於觸發這個鉤子。
----------------------------------看一看別人實現的方案--------------------------------
首先是外掛程式經理類pluginmanager,這個類要放在全域性引用裡面,在所有需要用到外掛程式的地方,優先載入。
<?php/**** 外掛程式機制的實現核心類
*/class
pluginmanager}}
}#此處做些日誌記錄方面的東西
} /**
* 註冊需要監聽的外掛程式方法(鉤子)
** @param string $hook
* @param object $reference
* @param string $method
*/function register($hook, &$reference, $method
)
/*** 觸發乙個鉤子
** @param string $hook 鉤子的名稱
* @param mixed $data 鉤子的入參
* @return mixed
*/function trigger($hook, $data='')}}
#此處做些日誌記錄方面的東西
return
$result
; }
}
接下來是乙個簡單外掛程式的實現demo_actions。這是乙個簡單的hello world外掛程式,用於輸出一句話。在實際情況中,say_hello可能包括對資料庫的操作,或者是其他一些特定的邏輯。
<?php/*** 這是乙個hello world簡單外掛程式的實現
*//*
**需要注意的幾個預設規則:
* 1. 本外掛程式類的檔名必須是action
* 2. 外掛程式類的名稱必須是
*/class
demo_actions
function
say_hello()
}
再接下來就是外掛程式的呼叫觸發的地方,比如我要將say_hello放到我部落格首頁index.php, 那麼你在index.php中的某個位置寫下:
$pluginmanager->trigger('demo','');
第乙個引數表示鉤子的名字,第二個引數是外掛程式對應方法的入口引數,由於這個例子中沒有輸入引數,所以為空。
這樣乙個例子基本上很明確的表達了"鉤子"外掛程式機制的實現方式和邏輯。
鏈結
js中的鉤子機制 hook
什麼是鉤子機制?使用鉤子機制有什麼好處?鉤子機制也叫hook機制,或者你可以把它理解成一種匹配機制,就是我們在 中設定一些鉤子,然後程式執行時自動去匹配這些鉤子 這樣做的好處就是提高了程式的執行效率,減少了if else 的使用同事優化 結構。由於js是單執行緒的程式語言,所以程式的執行效率在前端開...
jQuery中外掛程式機制
1.jquery.extend object 擴充套件jquery物件本身,主要是用來擴充套件jquery全域性函式 呼叫時直接 函式名 引數 charset utf 8 外掛程式機制title src js jquery 3.3.1.js script extend max function a,...
php外掛程式機制實現原理
外掛程式,亦即plug in,是指一類特定的功能模組 通常由第三方開發者實現 它的特點 1.隨時安裝 解除安裝 啟用 禁用 2.無論什麼狀態都不影響系統核心模組的執行,3.是一種非侵入式的模組化設計,實現了核心程式與外掛程式的鬆散耦合。乙個健壯的php外掛程式機制,我認為必須具備以下特點 1.外掛程...