• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

php利用反射实现插件机制的代码

PHP 水墨上仙 1915次浏览

php利用反射实现插件机制的代码

<?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;    
}    

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利用反射实现插件机制的代码
喜欢 (0)
加载中……