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

2021-05-22 07:02:58 字數 2607 閱讀 3170

乙個健壯的外掛程式機制,我認為必須具備以下特點:

外掛程式的動態監聽和載入(lookup)

外掛程式的動態觸發

以上兩點的實現均不影響核心程式的執行

要在程式中實現外掛程式,我們首先應該想到的就是定義不同的鉤子(hooks);「鉤子」是乙個很形象的邏輯概念,你可以認為它是系統預留的外掛程式觸發條件。它的邏輯原理如下:當系統執行到某個鉤子時,會判斷這個鉤子的條件是否滿足;如果滿足,會轉而先去呼叫鉤子所制定的功能,然後返回繼續執行餘下的程式;如果不滿足,跳過即可。這有點像彙編中的「中斷保護」邏輯。

可能你感覺上面的話比較無聊,讓人昏昏欲睡;但是要看懂下面我寫的**,理解以上的原理是必不可少的。

下面進行php中外掛程式機制的核心實現,整個機制核心分為三大塊:

乙個外掛程式經理類:這是核心之核心。它是乙個應用程式全域性global物件。它主要有三個職責:

負責監聽已經註冊了的所有外掛程式,並例項化這些外掛程式物件。

負責註冊所有外掛程式。

當鉤子條件滿足時,觸發對應的物件方法。

外掛程式的功能實現:這大多由第三方開發人員完成,但需要遵循一定的規則,這個規則是外掛程式機制所規定的,因外掛程式機制的不同而不同,下面的顯示**你會看到這個規則。

外掛程式的觸發:也就是鉤子的觸發條件。具體來說這是一小段**,放置在你需要外掛程式實現的地方,用於觸發這個鉤子。

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

外掛程式經理pluginmanager類:

以下為引用的內容:

<?

/**

* stblog pluginmanager class

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

#此處做些日誌記錄方面的東西

} /**

* 註冊需要監聽的外掛程式方法(鉤子)

* * @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簡單外掛程式的實現

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

*    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中外掛程式機制的一種實現方案

原理講了一大堆,下面看看我的實現方案 外掛程式經理pluginmanager類 stblog pluginmanager class 外掛程式機制的實現核心類 package stblog subpackage libraries category libraries author saturn c...

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

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

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

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