跟著辛星用PHP的反射機制來實現外掛
我的博文的前一篇講解了PHP的反射機制是怎麼回事,如果讀者還不清楚反射機制,可以搜尋下或者看我的博文,都是不錯的選擇,我們開始講解一下怎麼用PHP來實現外掛機制。所謂外掛機制,就是我們定義一個介面,即我們定義一個interface,然後第三方外掛就去實現這個interface,然後我們拿到了這個外掛之後,去呼叫這個外掛的功能,我們可以不知道這些外掛的類名等資訊,我們接下來就用反射機制去實現這個功能。
由於我只是簡單的示例,所以我寫的程式碼並不長,而且很簡單,所以,大家既然理解了上面的步驟,那麼就可以直接看原始碼了,其中的註釋還是蠻清楚的,如果讀者有什麼不清楚的,可以告訴我,我會認真回覆的。
<?php
/**
*我們定義好一個介面,叫做Ixin
*/
interface Ixin{
function msg();
}
/**
*某熱心開發人員給我們寫了一個外掛類
*/
class Xin implements Ixin{
function msg(){
echo "辛星你好";
}
}
/**
*我們先搜尋該外掛類,並且判斷它是否實現了msg方法
*/
function find(){
//定義描述外掛的陣列
$plugin = array();
foreach (get_declared_classes() as $class) {
//例項化反射類的類
$reclass = new ReflectionClass($class);
//判斷它是否實現了介面Ixin
if($reclass->implementsInterface('Ixin')){
$plugin[] = $reclass;
}
}
return $plugin;
}
/**
*我們去呼叫該外掛的msg方法
*/
function myexec(){
$arr = find();
foreach (find() as $plugin) {
//判斷該外掛是否有方法msg
if($plugin->hasMethod('msg')){
//得到這個方法類的一個例項
$remethod = $plugin->getMethod('msg');
//如果它是靜態方法,則直接呼叫即可
if($remethod->isStatic()){
$remethod->invoke(null);
}else{
//先宣告外掛類的一個例項,然後呼叫它
$pluins = $plugin->newInstance();
$remethod->invoke($pluins);
}
}
}
}
/**
*我們只需要呼叫這一個函式就可以了
*它自動搜尋所有的外掛,並且執行外掛的msg函式
*/
myexec();
我還是分析一下吧,介面Ixin是我們定義的介面,而類Xin是第三方的外掛,我們用find自動搜尋了所有定義的類,然後我們判斷這些類裡面誰繼承自Ixin,並且實現了msg方法,我們拿到了這個列表自後,就可以用myexec方法去呼叫它們了。
思路清晰嗎?清晰請打1.。。。O(∩_∩)O~
相關文章
- 跟著辛星深入探討一下PHP的反射機制PHP反射
- JAVA的反射機制==>用反射分析類的實現Java反射
- php 反射機制案例PHP反射
- PHP外掛系統的實現(七):外掛案例PHP
- PHP外掛系統的實現(五):觸發外掛PHP
- 工廠模式-PHP的反射機制模式PHP反射
- Java 反射機制應用實踐Java反射
- Java反射機制應用實踐Java反射
- Java反射機制實現與原理Java反射
- Taro cli流程和外掛化機制實現原理
- PHP外掛系統的實現(一)PHP
- C#反射實現簡單的外掛系統C#反射
- 詳解 php 反射機制原理PHP反射
- PHP外掛系統的實現(二):獲取全部外掛資訊PHP
- PHP smarty的ubb外掛實現彩字PHP
- 利用反射機制實現依賴注入的原理反射依賴注入
- 反射機制及應用反射
- PostgreSQL外掛hook機制SQLHook
- PHP外掛系統的實現(三):實現探測器PHP
- 實現會員制功能的WordPress外掛-Simple Membership
- PHP外掛系統的實現(四):實現註冊動作PHP
- C++反射機制:可變引數模板實現C++反射C++反射
- webpack外掛機制之TapableWeb
- 探尋 webpack 外掛機制Web
- Java的反射機制Java反射
- C++反射機制:可變引數模板實現C++反射薦C++反射
- C++反射機制:可變引數模板實現C++反射(二)C++反射
- PHP外掛系統的實現(六):完整經理類PHP
- webpack-外掛機制雜記Web
- JAVA反射機制自定義框架測試程式碼,留著以後複習用!Java反射框架
- 全新的android外掛機制 - DroidPluginAndroidPlugin
- 淺析如何通過PHP類的反射來實現依賴注入PHP反射依賴注入
- 跟著小白學zookeeper: 分散式鎖的實現分散式
- Java反射機制Java反射
- 跟著GPT學習Java執行緒中斷機制GPTJava執行緒
- 反射機制的基本用法反射
- Java 中的 反射機制Java反射
- 深入詳解Java反射機制與底層實現原理?Java反射