我的博文的前一篇講解了PHP的反射機制是怎么回事,如果讀者還不清楚反射機制,可以搜索下或者看我的博文,都是不錯的選擇,我們開始講解一下怎么用PHP來實現插件機制。所謂插件機制,就是我們定義一個接口,即我們定義一個interface,然后第三方插件就去實現這個interface,然后我們拿到了這個插件之后,去調用這個插件的功能,我們可以不知道這些插件的類名等信息,我們接下來就用反射機制去實現這個功能。
由于我只是簡單的示例,所以我寫的代碼并不長,而且很簡單,所以,大家既然理解了上面的步驟,那么就可以直接看源代碼了,其中的注釋還是蠻清楚的,如果讀者有什么不清楚的,可以告訴我,我會認真回復的。
<?php/***我們定義好一個接口,叫做Ixin*/interface Ixin{ function msg();}/***某熱心開發人員給我們寫了一個插件類*/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'); //如果它是靜態方法,則直接調用即可 if($remethod->isStatic()){ $remethod->invoke(null); }else{ //先聲明插件類的一個實例,然后調用它 $pluins = $plugin->newInstance(); $remethod->invoke($pluins); } } }}/***我們只需要調用這一個函數就可以了*它自動搜索所有的插件,并且執行插件的msg函數*/myexec();
思路清晰嗎?清晰請打1.。。。O(∩_∩)O~
PHP編程鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答