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)   ***/

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...