php利用反射实现插件机制的方法_PHP教程

WBOY
发布: 2016-07-13 10:03:17
原创
949 人浏览过

php利用反射实现插件机制的方法

 本文实例讲述了php利用反射实现插件机制的方法。分享给大家供大家参考。具体实现方法如下:

 

代码如下:

/**
 * @name    PHP反射API--利用反射技术实现的插件系统架构
 */   
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);

 

希望本文所述对大家的php程序设计有所帮助。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/969331.htmlTechArticlephp利用反射实现插件机制的方法 本文实例讲述了php利用反射实现插件机制的方法。分享给大家供大家参考。具体实现方法如下: 代码如下...
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板