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


Posted in PHP onMarch 14, 2015

本文实例讲述了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程序设计有所帮助。

PHP 相关文章推荐
如何在WIN2K下安装PHP4.04
Oct 09 PHP
php flush类输出缓冲剖析
Oct 19 PHP
php模拟ping命令(php exec函数的使用方法)
Oct 25 PHP
兼容ie6浏览器的php下载文件代码分享
Jul 14 PHP
PHP MSSQL 分页实例
Apr 13 PHP
php 实现301重定向跳转实例代码
Jul 18 PHP
ThinkPHP模板标签eq if 中区分0,null,false的方法
Mar 24 PHP
用php+ajax新建流程(请假、进货、出货等)
Jun 11 PHP
PHP实现UTF8二进制及明文字符串的转化功能示例
Nov 20 PHP
php nginx 实时输出的简单实现方法
Jan 21 PHP
thinkPHP框架自动填充原理与用法分析
Apr 03 PHP
laravel5实现微信第三方登录功能
Dec 06 PHP
php检测apache mod_rewrite模块是否安装的方法
Mar 14 #PHP
php读取csv文件并输出的方法
Mar 14 #PHP
php列出mysql表所有行和列的方法
Mar 13 #PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
Mar 13 #PHP
PHP 验证登陆类分享
Mar 13 #PHP
php检索或者复制远程文件的方法
Mar 13 #PHP
php通过文件流方式复制文件的方法
Mar 13 #PHP
You might like
ThinkPHP模版中导入CSS和JS文件的方法
2014/11/29 PHP
php实现的树形结构数据存取类实例
2014/11/29 PHP
PHP实现CSV文件的导入和导出类
2015/03/24 PHP
Javascript 设计模式(二) 闭包
2010/05/26 Javascript
基于Jquery的将DropDownlist的选中值赋给label的实现代码
2011/05/06 Javascript
读jQuery之十二 删除事件核心方法
2011/07/31 Javascript
js 绑定键盘鼠标事件示例代码
2014/02/12 Javascript
JS实现文字放大效果的方法
2015/03/03 Javascript
JavaScript返回网页中锚点数目的方法
2015/04/03 Javascript
快速掌握Node.js环境的安装与运行方法
2016/02/16 Javascript
详解node如何让一个端口同时支持https与http
2017/07/04 Javascript
dropload.js插件下拉刷新和上拉加载使用详解
2017/10/20 Javascript
nodejs取得当前执行路径的方法
2018/05/13 NodeJs
微信小程序手机号码验证功能的实例代码
2018/08/28 Javascript
Element UI 自定义正则表达式验证方法
2018/09/04 Javascript
vue自定义指令用法经典实例小结
2019/03/16 Javascript
微信小程序如何访问公众号文章
2019/07/08 Javascript
JS前端广告拦截实现原理解析
2020/02/17 Javascript
webpack+vue-cil 中proxyTable配置接口地址代理操作
2020/07/18 Javascript
vue用ant design中table表格,点击某行时触发的事件操作
2020/10/28 Javascript
Python使用pygame模块编写俄罗斯方块游戏的代码实例
2015/12/08 Python
深入理解python中的atexit模块
2017/03/07 Python
Python3.5装饰器典型案例分析
2019/04/30 Python
python版DDOS攻击脚本
2019/06/12 Python
Python测试线程应用程序过程解析
2019/12/31 Python
Python爬虫HTPP请求方法有哪些
2020/06/03 Python
python excel多行合并的方法
2020/12/09 Python
PurCotton全棉时代官网:100%天然棉花生产的生活护理用品
2016/11/18 全球购物
《夜晚的实验》教学反思
2014/02/19 职场文书
化妆品活动策划方案
2014/05/23 职场文书
教师工作自我鉴定范文
2014/09/14 职场文书
2014年维稳工作总结
2014/11/18 职场文书
重阳节慰问信
2015/02/15 职场文书
爱国主义教育基地观后感
2015/06/18 职场文书
女性健康知识讲座主持词
2015/07/04 职场文书
五年级数学教学反思
2016/02/16 职场文书