国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
    主站蜘蛛池模板: 江达县| 元谋县| 湘潭县| 特克斯县| 金乡县| 应城市| 吉安县| 攀枝花市| 阿克| 汝阳县| 万山特区| 贺州市| 独山县| 天峨县| 谷城县| 阿坝县| 佛冈县| 曲麻莱县| 启东市| 伊通| 林周县| 南通市| 尉氏县| 眉山市| 沈阳市| 东乡族自治县| 湖口县| 文水县| 平阴县| 个旧市| 马边| 鲁甸县| 满洲里市| 浏阳市| 雷州市| 宁津县| 灵武市| 永和县| 崇仁县| 广河县| 故城县|