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开发大型项目的一点经验
Oct 09 PHP
php中记录用户访问过的产品,在cookie记录产品id,id取得产品信息
May 04 PHP
php中用加号与用array_merge合并数组的区别深入分析
Jun 03 PHP
PHP临时文件的安全性分析
Jul 04 PHP
微信随机生成红包金额算法php版
Jul 21 PHP
PHP实现链式操作的原理详解
Sep 16 PHP
php获取ip及网址的简单方法(必看)
Apr 01 PHP
yii 2.0中表单小部件的使用方法示例
May 23 PHP
PHP实现对图片的反色处理功能【测试可用】
Feb 01 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
Jun 13 PHP
php实现将数据做成json的格式给前端使用
Aug 21 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
Dec 13 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实现链结人气统计
2006/10/09 PHP
Adodb的十个实例(清晰版)
2006/12/31 PHP
PHP 分页原理分析,大家可以看看
2009/12/21 PHP
PHP ajax 异步执行不等待执行结果的处理方法
2015/05/27 PHP
PHP children()函数讲解
2019/02/03 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
JavaScript类库D
2010/10/24 Javascript
javaScript中的this示例学习详解及工作原理
2014/01/13 Javascript
jquery序列化表单去除指定元素示例代码
2014/04/10 Javascript
javascript中解析四则运算表达式的算法和示例
2014/08/11 Javascript
浅谈Javascript线程及定时机制
2015/07/02 Javascript
javascript实现dom元素可拖动
2016/03/21 Javascript
如何在Angular2中使用jQuery及其插件的方法
2017/02/09 Javascript
提高JavaScript执行效率的23个实用技巧
2017/03/01 Javascript
jQuery EasyUI结合zTree树形结构制作web页面
2017/09/01 jQuery
Three.js实现浏览器变动时进行自适应的方法
2017/09/26 Javascript
JS实现合并json对象的方法
2017/10/10 Javascript
详解使用路由延迟加载 Angular 模块
2017/10/12 Javascript
基于JavaScript 性能优化技巧心得(分享)
2017/12/11 Javascript
js实现一个页面多个倒计时的3种方法
2019/02/25 Javascript
vue路由 遍历生成复数router-link的例子
2019/10/30 Javascript
vue组件开发之tab切换组件使用详解
2020/08/21 Javascript
js实现简易点击切换显示或隐藏
2020/11/29 Javascript
基于Vant UI框架实现时间段选择器
2020/12/24 Javascript
Python脚本文件打包成可执行文件的方法
2015/06/02 Python
Django中ORM表的创建和增删改查方法示例
2017/11/15 Python
Pyspider中给爬虫伪造随机请求头的实例
2018/05/07 Python
python3中os.path模块下常用的用法总结【推荐】
2018/09/16 Python
自荐信如何“自荐”
2013/10/24 职场文书
建筑公司文秘岗位职责
2013/11/29 职场文书
平安建设实施方案
2014/03/19 职场文书
学习演讲稿范文
2014/05/10 职场文书
婚礼答谢词
2015/01/04 职场文书
消夏晚会主持词
2015/06/30 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
Java并发编程之原子性-Atomic的使用
2022/03/16 Java/Android