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
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
相关文章推荐
- PHP 反射机制详解 以及插件架构实现
- 跟着辛星用PHP的反射机制来实现插件
- PHP 反射机制详解 以及插件架构实现
- php反射机制以及利用php反射机制实现可插拔可扩展的插件架构
- php利用反射实现插件机制的方法
- PHP 反射机制详解 以及插件架构实现
- php利用反射实现插件机制的方法
- 跟着辛星用PHP的反射机制来实现插件
- PHP基于反射机制实现插件的可插拔设计详解
- PHP反射机制实现插件的可插拔设计
- PHP中插件机制的一种实现方案
- PHP 反射机制实现动态代理的代码
- php实现网站插件机制的方法
- PHP 反射机制实现动态代理的代码
- PHP使用反射机制实现查找类和方法的所在位置
- PHP中插件机制的一种实现方案
- PHP中插件机制的一种实现方案
- 采用C#反射机制和动态参数实现可插件业务平台
- php 反射机制实现代理模式
- 用php反射实现插件的自动调用