微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐