加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

php利用反射实现插件机制功能实例

发布时间:2020-05-25 05:47:13 所属栏目:PHP 来源:互联网
导读:php利用反射实现插件机制功能实例

对php利用反射实现插件机制的代码感兴趣的小伙伴,下面一起跟随脚本之家 jb51.cc的小编两巴掌来看看吧!


/**
 * php利用反射实现插件机制的代码
 *
 * @param 
 * @arrange 512-笔记网: www.512Pic.com
 **/  
interface Iplugin{    
	public static function getName();    
}    
function findPlugins(){    
	$plugins = array();    
	foreach (get_declared_classes() as $class){    
		$reflectionClass = new ReflectionClass($class);    
		if ($reflectionClass->implementsInterface('Iplugin')) {    
			$plugins[] = $reflectionClass;    
		}    
	}    
	return $plugins;    
}    
function computeMenu(){    
	$menu = array();    
	foreach (findPlugins() as $plugin){    
		if ($plugin->hasMethod('getMenuItems')) {    
			$reflectionMethod = $plugin->getMethod('getMenuItems');    
			if ($reflectionMethod->isStatic()) {    
				$items = $reflectionMethod->invoke(null);    
			} else {    
				$pluginInstance = $plugin->newInstance();    
				$items = $reflectionMethod->invoke($pluginInstance);    
			}    
			$menu = array_merge($menu,$items);    
		}    
	}    
	return $menu;    
}    
function computeArticles(){    
	$articles = array();    
	foreach (findPlugins() as $plugin){    
		if ($plugin->hasMethod('getArticles')) {    
			$reflectionMethod = $plugin->getMethod('getArticles');    
			if ($reflectionMethod->isStatic()) {    
				$items = $reflectionMethod->invoke(null);    
			} else {    
				$pluginInstance = $plugin->newInstance();    
				$items = $reflectionMethod->invoke($pluginInstance);    
			}    
			$articles = array_merge($articles,$items);    
		}    
	}    
	return $articles;    
}   
class MycoolPugin implements Iplugin {    
	public static function getName(){    
		return 'MycoolPlugin';    
	}    
	public static function getMenuItems(){    
		return array(array('description'=>'MycoolPlugin','link'=>'/MyCoolPlugin'));    
	}    
	public static function getArticles(){    
		return array(array('path'=>'/MycoolPlugin','title'=>'This is a really cool article','text'=> 'xxxxxxxxx' ));    
	}    
}
$menu = computeMenu();    
$articles    = computeArticles();    
print_r($menu);    
print_r($articles);   
/***   来自脚本之家 jb51.cc(jb51.cc)   ***/

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读