您的位置:首页 > 编程语言 > PHP开发

PHP反射API实现插件机制

2010-10-17 01:02 711 查看
<?php
interface Iplugin{
public static function getName();
}

class ContactPlugin implements Iplugin{
public static function getName(){
return __class__;
}
public static function getMenu(){
return array(
array('Contact','/contact/index.php/')
);
}
}
class HelpPlugin implements Iplugin{
public static function getName(){
return __class__;
}
public function getMenu(){
return array(
array('Help','/help/index.php/')
);
}
}

function findPlugins(){
$plugins = array();
$all_classes = get_declared_classes();
foreach($all_classes as $class){
$reflection_class = new ReflectionClass($class);
if($reflection_class->isUserDefined()&&$reflection_class->implementsInterface('Iplugin'))
$plugins[] = $reflection_class;

}
return $plugins;
}
function findMenus(){
$plugins = findPlugins();
$menus = array();
foreach($plugins as $eachPlugin){
if($eachPlugin->hasMethod('getMenu')){
$reflect_methond = $eachPlugin->getMethod('getMenu');
if($reflect_methond->isStatic()){
$method = $reflect_methond->invoke(null);
}else{
$plugin_instance = $eachPlugin->newInstance();
$method = $reflect_methond->invoke($plugin_instance);
}
$menus[] = $method;
}
}
return $menus;
}
$all_plugins = findPlugins();
print_r($all_plugins);
$all_menus = findMenus();
print_r($all_menus);
本文出自 “张学友的悲伤” 博客,请务必保留此出处http://flandycheng.blog.51cto.com/855176/406704
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: