php中的鉤子 hook外掛程式機制

2022-03-24 09:22:15 字數 1734 閱讀 4521

對"鉤子"這個概念其實不熟悉,最近看到乙個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.外掛程...