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图片上传程序
Mar 27 PHP
PHP中MD5函数使用实例代码
Jun 07 PHP
php adodb连接mssql解决乱码问题
Jun 12 PHP
用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
May 07 PHP
PHP生成Gif图片验证码
Oct 27 PHP
php中出现空白页的原因及解决方法汇总
Jul 08 PHP
php实现仿写CodeIgniter的购物车类
Jul 29 PHP
10个超级有用的PHP代码片段果断收藏
Sep 23 PHP
PHP json_encode() 函数详解及中文乱码问题
Nov 05 PHP
PHP读取mssql json数据中文乱码的解决办法
Apr 11 PHP
PHP中strpos、strstr和stripos、stristr函数分析
Jun 11 PHP
PHP中常见的密码处理方式和建议总结
Oct 14 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中file_get_contents高?用法实例
2014/09/24 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
2015/02/08 PHP
php简单判断文本编码的方法
2015/07/30 PHP
老生常谈php中传统验证与thinkphp框架(必看篇)
2017/06/10 PHP
关于javascript中的parseInt使用技巧
2009/09/03 Javascript
jQuery 点击图片跳转上一张或下一张功能的实现代码
2010/03/12 Javascript
导航跟随滚动条置顶移动示例代码
2013/09/11 Javascript
JavaScript数据库TaffyDB用法实例分析
2015/07/27 Javascript
JavaScript中的冒泡排序法
2016/08/03 Javascript
全面解析Bootstrap表单样式的使用
2016/09/09 Javascript
JS操作xml对象转换为Json对象示例
2017/03/25 Javascript
VUE中v-model和v-for指令详解
2017/06/23 Javascript
使用JS编写的随机抽取号码的小程序
2017/08/11 Javascript
npm 常用命令详解(小结)
2019/01/17 Javascript
判断“命令按钮”是否被鼠标单击详解
2019/07/31 Javascript
Vue全局loading及错误提示的思路与实现
2019/08/09 Javascript
微信小程序通过一个json实现分享朋友圈图片
2019/09/03 Javascript
vue中实现弹出层动画效果的示例代码
2020/09/25 Javascript
Ant Design的Table组件去除
2020/10/24 Javascript
Node.js文本文件BOM头的去除方法
2020/11/22 Javascript
[02:30]联想杯DOTA2完美世界全国高校联赛—北京站现场
2015/11/16 DOTA
[01:31]DOTA2上海特级锦标赛 SECRET战队完整宣传片
2016/03/16 DOTA
python批量导出导入MySQL用户的方法
2013/11/15 Python
Python构造函数及解构函数介绍
2015/02/26 Python
使用Python生成url短链接的方法
2015/05/04 Python
Python爬虫包BeautifulSoup异常处理(二)
2018/06/17 Python
对python 通过ssh访问数据库的实例详解
2019/02/19 Python
python3 Scrapy爬虫框架ip代理配置的方法
2020/01/17 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
2020/02/18 Python
css3实现wifi信号逐渐增强效果实例
2017/08/09 HTML / CSS
Gap英国官网:Gap UK
2018/07/18 全球购物
Bed Bath & Beyond加拿大官网:购买床上用品、浴巾、厨房电器等
2019/10/04 全球购物
建筑施工实习自我鉴定
2013/09/19 职场文书
后勤采购员岗位职责
2013/12/19 职场文书
信息专业毕业生五年职业规划参考
2014/02/06 职场文书
纪检监察建议书
2014/05/19 职场文书