PHP中外掛程式機制的一種實現方案

2021-08-25 04:34:49 字數 1784 閱讀 3516

原理講了一大堆,下面看看我的實現方案:

外掛程式經理pluginmanager類:

<?

/*** stblog pluginmanager class

** 外掛程式機制的實現核心類

** @package stblog

* @subpackage libraries

* @category libraries

* @author saturn

*/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;

}}?>

以上**加上注釋不超過100行,就完成了整個外掛程式機制的核心。需要再次說明的是,你必須將它設定成全域性類,在所有 需要用到外掛程式的地方,優先載入。用#注釋的地方是你需要自行完成的部分,包括外掛程式的獲取和日誌記錄等等。

下面是乙個簡單外掛程式的實現。

<?

/*** 這是乙個hello world簡單外掛程式的實現

** @package demo

* @subpackage demo

* @category plugins

* @author saturn

*//**

*需要注意的幾個預設規則:

* 1. 本外掛程式類的檔名必須是action

* 2. 外掛程式類的名稱必須是

*/class demo_actions

function say_hello()

}?>

這是乙個簡單的hello world外掛程式,用於輸出一句話。在實際情況中,say_hello可能包括對資料庫的操作,或者是其他一些特定的邏輯,比如呼叫akimet api。

外掛程式實現的預設規則由核心系統開發者自行確定。比如本例的一些預設規則我在注釋中已經寫的很清楚,在此不在贅述。需要特別注意的是鉤子名稱不要重複。

最後一步,就是定義鉤子的觸發,你將鉤子放在**,上面這個外掛程式的方法就會在**出發。比如我要將say_hello放到我部落格首頁index.php, 那麼你在index.php中的某個位置寫下:

$pluginmanager->trigger('demo','');

第乙個引數表示鉤子的名字,在本例中它是demo;第二個引數是外掛程式對應方法的入口引數,由於這個例子中沒有輸入引數,所以為空。

總結

本篇文章介紹了外掛程式機制在php中實現的一種方法和思路,以及我本人對外掛程式機制的理解。初次接觸這個東西,可能會比較生澀,難以理解。但是當你結合真實的 例子,再想想程式的執行流程,思路可能會更清晰一些。

PHP中外掛程式機制的一種實現方案

乙個健壯的外掛程式機制,我認為必須具備以下特點 外掛程式的動態監聽和載入 lookup 外掛程式的動態觸發 以上兩點的實現均不影響核心程式的執行 要在程式中實現外掛程式,我們首先應該想到的就是定義不同的鉤子 hooks 鉤子 是乙個很形象的邏輯概念,你可以認為它是系統預留的外掛程式觸發條件。它的邏輯...

PHP中外掛程式機制的一種實現方案

乙個健壯的外掛程式機制,我認為必須具備以下特點 要在程式中實現外掛程式,我們首先應該想到的就是定義不同的鉤子 hooks 鉤子 是乙個很形象的邏輯概念,你可以認為它是系統預留的外掛程式觸發條件。它的邏輯原理如下 當系統執行到某個鉤子時,會判斷這個鉤子的條件是否滿足 如果滿足,會轉而先去呼叫鉤子所制定...

PHP中外掛程式機制的一種實現方案

乙個健壯的外掛程式機制,我認為必須具備以下特點 要在程式中實現外掛程式,我們首先應該想到的就是定義不同的鉤子 hooks 鉤子 是乙個很形象的邏輯概念,你可以認為它是系統預留的外掛程式觸發條 件。它的邏輯原理如下 當系統執行到某個鉤子時,會判斷這個鉤子的條件是否滿足 如果滿足,會轉而先去呼叫鉤子所制...