PHP反射API--利用反射技术实现的插件系统架构

 <?php
/**
 * @name :PHP反射API--利用反射技术实现的插件系统架构
 * @author :PHPCQ.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;
}
require_once(
'plugin.php');
$menu computeMenu();
$articles  computeArticles();
print_r($menu);
print_r($articles);


//plugin.php 代码如下
<?php
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));
        }
}     
      

上一篇文章: PHP反射API-实例 下一篇文章: MVC框架-前端控制器-原理

关于PHP博客

PHP blogger

博客-致力于分享PHP技术的开发心得, 记录站长生活的点点滴滴,PHP博客采用PHP 面向对象编程+Smarty模板引擎+Mysql数据库 开发(全站纯静态化与伪静态化)
QQ:334192009
电邮:admin@PHPdesigner.org

本站搜索

本站最新文章

博客最近档案

友情链接