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 相关文章推荐
php MySQL与分页效率
Jun 04 PHP
smarty模板中拼接字符串的方法
Feb 14 PHP
php计算几分钟前、几小时前、几天前的几个函数、类分享
Apr 09 PHP
浅谈php和.net的区别
Sep 28 PHP
PHP获取数组最大值下标的方法
May 12 PHP
php实现购物车功能(下)
Jan 05 PHP
基于jQueryUI和Corethink实现百度的搜索提示功能
Nov 09 PHP
PHP实现二维数组去重功能示例
Jan 12 PHP
PHP 获取指定地区的天气实例代码
Feb 08 PHP
PHP xpath()函数讲解
Feb 11 PHP
PHP 计算两个时间段之间交集的天数示例
Oct 24 PHP
详解phpstorm2020最新破解方法
Sep 17 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
PHP-Java-Bridge使用笔记
2014/09/22 PHP
PHP基于自定义函数生成笛卡尔积的方法示例
2017/09/30 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
linux mint下安装phpstorm2020包括JDK部分的教程详解
2020/09/17 PHP
JS提交并解析后台返回的XML的代码
2008/11/03 Javascript
jQuery 动画弹出窗体支持多种展现方式
2010/04/29 Javascript
js仿百度有啊通栏展示效果实现代码
2013/05/28 Javascript
js使用eval解析json实例与注意事项分享
2014/01/18 Javascript
JavaScript组合模式学习要点
2016/08/26 Javascript
Bootstrap CDN和本地化环境搭建
2016/10/26 Javascript
浅谈js算法和流程控制
2016/12/29 Javascript
JS基于for语句编写的九九乘法表示例
2018/01/04 Javascript
详解Node.js中的Async和Await函数
2018/02/22 Javascript
Java设计中的Builder模式的介绍
2018/03/22 Javascript
vue.js 实现点击按钮动态添加li的方法
2018/09/07 Javascript
浅谈angularJs函数的使用方法(大小写转换,拷贝,扩充对象)
2018/10/08 Javascript
微信小程序事件流原理解析
2019/11/27 Javascript
[44:10]2018DOTA2亚洲邀请赛 4.5 淘汰赛 EG vs VP 第一场
2018/04/06 DOTA
[01:47]2018年度DOTA2最佳教练-完美盛典
2018/12/16 DOTA
python实现ftp客户端示例分享
2014/02/17 Python
列举Python中吸引人的一些特性
2015/04/09 Python
Python中单例模式总结
2018/02/20 Python
python分治法求二维数组局部峰值方法
2018/04/03 Python
Python 计算任意两向量之间的夹角方法
2019/07/05 Python
Python Pandas对缺失值的处理方法
2019/09/27 Python
python 生成器和迭代器的原理解析
2019/10/12 Python
pytorch的梯度计算以及backward方法详解
2020/01/10 Python
用python制作个视频下载器
2021/02/01 Python
荷兰演唱会和体育比赛订票网站:viagogo荷兰
2018/04/08 全球购物
美国在线艺术商店:HandmadePiece
2020/11/06 全球购物
方正Java笔试题
2014/07/03 面试题
专科毕业生就业推荐信
2013/11/01 职场文书
应届生学校辅导员求职信
2013/11/07 职场文书
安全员岗位职责
2013/11/11 职场文书
支部书记四风对照材料
2014/08/28 职场文书
史上最全的军训拉歌口号
2015/12/25 职场文书