實現方案: pluginmanager類:
<?php/**
* pluginmanager class
* * 外掛程式機制的實現核心類
* * author: 依然範兒特西
*/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
; }
}
define(stpath, "./");
$pluginmanager=new
pluginmanager();
$pluginmanager->trigger("demo");
需要說明的是,你必須將它設定成全域性類,在所有 需要用到外掛程式的地方,優先載入。
用 # 注釋的地方是你需要自行完成的部分,包括外掛程式的獲取和日誌記錄等等。
下面是乙個簡單外掛程式的實現。
<?/*** 這是乙個hello world簡單外掛程式的實現
*//*
**需要注意的幾個預設規則:
* 1. 本外掛程式類的檔名必須是action
* 2. 外掛程式類的名稱必須是
*/class
demo_actions
function say_hello()
}?>
這是乙個簡單的hello world外掛程式,用於輸出一句話。在實際情況中,say_hello可能包括對資料庫的操作,或者是其他一些特定的邏輯,比如呼叫 api。
外掛程式實現的預設規則由核心系統開發者自行確定。比如本例的一些預設規則我在注釋中已經寫的很清楚,在此不在贅述。需要特別注意的是鉤子名稱不要重複。
最後一步,就是定義鉤子的觸發,你將鉤子放在**,上面這個外掛程式的方法就會在**觸發。比如我要將say_hello放到我部落格首頁index.php, 那麼你在index.php中的某個位置寫下:
$pluginmanager->trigger('demo
','');
第乙個引數表示鉤子的名字,在本例中它是demo;第二個引數是外掛程式對應方法的入口引數,由於這個例子中沒有輸入引數,所以為空。
總結
本篇文章介紹了外掛程式機制在php中實現的一種方法和思路,以及我本人對外掛程式機制的理解。 實際應用中。要根據框架和需求進行相應調整 !
PHP中外掛程式機制的一種實現方案
乙個健壯的外掛程式機制,我認為必須具備以下特點 外掛程式的動態監聽和載入 lookup 外掛程式的動態觸發 以上兩點的實現均不影響核心程式的執行 要在程式中實現外掛程式,我們首先應該想到的就是定義不同的鉤子 hooks 鉤子 是乙個很形象的邏輯概念,你可以認為它是系統預留的外掛程式觸發條件。它的邏輯...
PHP中外掛程式機制的一種實現方案
原理講了一大堆,下面看看我的實現方案 外掛程式經理pluginmanager類 stblog pluginmanager class 外掛程式機制的實現核心類 package stblog subpackage libraries category libraries author saturn c...
PHP中外掛程式機制的一種實現方案
乙個健壯的外掛程式機制,我認為必須具備以下特點 要在程式中實現外掛程式,我們首先應該想到的就是定義不同的鉤子 hooks 鉤子 是乙個很形象的邏輯概念,你可以認為它是系統預留的外掛程式觸發條件。它的邏輯原理如下 當系統執行到某個鉤子時,會判斷這個鉤子的條件是否滿足 如果滿足,會轉而先去呼叫鉤子所制定...