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 删除记录同时删除图片文件的实现代码
May 12 PHP
php xml 入门学习资料
Jan 01 PHP
php编写一个简单的路由类
Apr 13 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
Aug 08 PHP
将FCKeditor导入PHP+SMARTY的实现方法
Jan 15 PHP
php猴子选大王问题解决方法
May 12 PHP
smarty模板判断数组为空的方法
Jun 10 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
Feb 08 PHP
PHP用函数嵌入网站访问量计数器
Oct 27 PHP
PHP自定义递归函数实现数组转JSON功能【支持GBK编码】
Jul 17 PHP
php提取微信账单的有效信息
Oct 01 PHP
laravel model模型处理之修改查询或修改字段时的类型格式案例
Oct 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
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
2013/06/02 PHP
php获取apk包信息的方法
2014/08/15 PHP
PHP查找与搜索数组元素方法总结
2015/06/12 PHP
php中static和const关键字用法分析
2016/12/07 PHP
教您去掉ie网页加载进度条的方法
2010/12/09 Javascript
js 中{},[]中括号,大括号使用详解
2011/05/12 Javascript
用Jquery重写windows.alert方法实现思路
2013/04/03 Javascript
Node.js实现批量去除BOM文件头
2014/12/20 Javascript
js读取csv文件并使用json显示出来
2015/01/09 Javascript
javascript实现简单的二级联动
2015/03/19 Javascript
jQuery使用$.ajax进行异步刷新的方法(附demo下载)
2015/12/04 Javascript
浅析js绑定事件的常用方法
2016/05/15 Javascript
JS实现图文并茂的tab选项卡效果示例【附demo源码下载】
2016/09/21 Javascript
jQuery中 $ 符号的冲突问题及解决方案
2016/11/04 Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
2017/04/13 jQuery
jquery中$.fn和图片滚动效果实现的必备知识总结
2017/04/21 jQuery
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
2018/10/26 Javascript
JavaScript中展开运算符及应用的实例代码
2021/01/14 Javascript
[43:51]2014 DOTA2国际邀请赛中国区预选赛 Dream Times VS TongFu
2014/05/22 DOTA
[45:18]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第一场
2018/04/04 DOTA
分享一下Python数据分析常用的8款工具
2018/04/29 Python
python 实现批量图片识别并翻译
2020/11/02 Python
html5+css3实现一款注册表单实例
2013/04/17 HTML / CSS
详解HTML5中的manifest缓存使用
2015/09/09 HTML / CSS
瑞士领先的网上超市:LeShop.ch
2018/11/14 全球购物
SIMON MILLER官网:洛杉矶的生活方式品牌
2020/10/19 全球购物
C#里面如何判断一个Object是否是某种类型(如Boolean)?
2016/02/10 面试题
幼儿教师工作感言
2014/02/14 职场文书
节约粮食标语
2014/06/18 职场文书
2014年审计人员工作总结
2014/12/19 职场文书
银行求职自荐信范文
2015/03/04 职场文书
2015年文明创建工作总结
2015/04/30 职场文书
法定授权委托证明书
2015/06/18 职场文书
毕业季聚会祝酒词!
2019/07/04 职场文书
导游词之江南园林狮子林
2019/09/16 职场文书
深入理解MySQL中MVCC与BufferPool缓存机制
2022/05/25 MySQL