国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

跟著辛星用PHP的反射機制來實現插件

2020-03-22 19:56:36
字體:
來源:轉載
供稿:網友
  • 我的博文的前一篇講解了PHP的反射機制是怎么回事,如果讀者還不清楚反射機制,可以搜索下或者看我的博文,都是不錯的選擇,我們開始講解一下怎么用PHP來實現插件機制。所謂插件機制,就是我們定義一個接口,即我們定義一個interface,然后第三方插件就去實現這個interface,然后我們拿到了這個插件之后,去調用這個插件的功能,我們可以不知道這些插件的類名等信息,我們接下來就用反射機制去實現這個功能。

    由于我只是簡單的示例,所以我寫的代碼并不長,而且很簡單,所以,大家既然理解了上面的步驟,那么就可以直接看源代碼了,其中的注釋還是蠻清楚的,如果讀者有什么不清楚的,可以告訴我,我會認真回復的。

    <?php/***我們定義好一個接口,叫做Ixin*/interface Ixin{	function msg();}/***某熱心開發(fā)人員給我們寫了一個插件類*/html' target='_blank'>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');			//如果它是靜態(tài)方法,則直接調用即可			if($remethod->isStatic()){				$remethod->invoke(null);			}else{				//先聲明插件類的一個實例,然后調用它				$pluins = $plugin->newInstance();				$remethod->invoke($pluins);			}		}	}}/***我們只需要調用這一個函數就可以了*它自動搜索所有的插件,并且執(zhí)行插件的msg函數*/myexec();

    我還是分析一下吧,接口Ixin是我們定義的接口,而類Xin是第三方的插件,我們用find自動搜索了所有定義的類,然后我們判斷這些類里面誰繼承自Ixin,并且實現了msg方法,我們拿到了這個列表自后,就可以用myexec方法去調用它們了。

    思路清晰嗎?清晰請打1.。。。O(∩_∩)O~

    PHP編程

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

  • 發(fā)表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發(fā)表
    主站蜘蛛池模板: 兴隆县| 屏东市| 张家界市| 潼关县| 包头市| 广昌县| 阜城县| 洱源县| 舟山市| 平南县| 灯塔市| 寿光市| 株洲市| 双桥区| 祁门县| 介休市| 阳原县| 甘泉县| 乌审旗| 沁阳市| 景谷| 北碚区| 砚山县| 黎城县| 蕲春县| 闻喜县| 灌云县| 枣阳市| 康定县| 云梦县| 朝阳县| 宣化县| 拉孜县| 大渡口区| 原阳县| 彰武县| 高安市| 攀枝花市| 古浪县| 沽源县| 黄浦区|