原理講了一大堆,下面看看我的實現方案:
外掛程式經理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 鉤子 是乙個很形象的邏輯概念,你可以認為它是系統預留的外掛程式觸發條 件。它的邏輯原理如下 當系統執行到某個鉤子時,會判斷這個鉤子的條件是否滿足 如果滿足,會轉而先去呼叫鉤子所制...