下面是一個(gè)簡單插件的實(shí)現(xiàn)。
<? /** * 這是一個(gè)Hello World簡單插件的實(shí)現(xiàn) * * @package DEMO * @subpackage DEMO * @category Plugins * @author Saturn * @link http://www.cnsaturn.com/ */ /** *需要注意的幾個(gè)默認(rèn)規(guī)則: * 1. 本插件類的文件名必須是action * 2. 插件類的名稱必須是{插件名_actions} */ class DEMO_actions { //解析函數(shù)的參數(shù)是pluginManager的引用 function __construct(&$pluginManager) { //注冊這個(gè)插件 //第一個(gè)參數(shù)是鉤子的名稱 //第二個(gè)參數(shù)是pluginManager的引用 //第三個(gè)是插件所執(zhí)行的方法 $pluginManager->register('demo', $this, 'say_hello'); } function say_hello() { echo 'Hello World'; } } ?>
這是一個(gè)簡單的Hello World插件,用于輸出一句話。在實(shí)際情況中,say_hello可能包括對數(shù)據(jù)庫的操作,或者是其他一些特定的邏輯,比如調(diào)用Akimet API。
插件實(shí)現(xiàn)的默認(rèn)規(guī)則由核心系統(tǒng)開發(fā)者自行確定。比如本例的一些默認(rèn)規(guī)則我在注釋中已經(jīng)寫的很清楚,在此不在贅述。需要特別注意的是鉤子名稱不要重復(fù)。
最后一步,就是定義鉤子的觸發(fā),你將鉤子放在哪里,上面這個(gè)插件的方法就會在哪里出發(fā)。比如我要將say_hello放到我博客首頁Index.php,那么你在index.php中的某個(gè)位置寫下:
$pluginManager->trigger('demo','');
第一個(gè)參數(shù)表示鉤子的名字,在本例中它是demo;第二個(gè)參數(shù)是插件對應(yīng)方法的入口參數(shù),由于這個(gè)例子中沒有輸入?yún)?shù),所以為空。
總結(jié)
本篇文章介紹了插件機(jī)制在PHP中實(shí)現(xiàn)的一種方法和思路,以及我本人對插件機(jī)制的理解。初次接觸這個(gè)東西,可能會比較生澀,難以理解。但是當(dāng)你結(jié)合真實(shí)的例子,再想想程序的運(yùn)行流程,思路可能會更清晰一些。
經(jīng)典論壇交流: http://bbs.blueidea.com/thread-2948641-1-1.html
本文鏈接:http://www.95time.cn/tech/program/2009/7153.asp
出處:藍(lán)色理想
責(zé)任編輯:bluehearts
上一頁 PHP中插件機(jī)制的一種實(shí)現(xiàn)方案 [2] 下一頁
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|