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 程序授权验证开发思路
Jul 09 PHP
在PHP中使用X-SendFile头让文件下载更快
Jun 01 PHP
Thinkphp中数据按分类嵌套循环实现方法
Oct 30 PHP
php使用fgetcsv读取csv文件出现乱码的解决方法
Nov 08 PHP
thinkphp循环结构用法实例
Nov 24 PHP
php将数组转换成csv格式文件输出的方法
Mar 14 PHP
PHP IDE phpstorm 常用快捷键
May 18 PHP
基于PHP技术开发客服工单系统
Jan 06 PHP
使用ltrace工具跟踪PHP库函数调用的方法
Apr 25 PHP
老生常谈PHP 文件写入和读取(必看篇)
May 22 PHP
Windows 下安装 swoole 图文教程(php)
Jun 05 PHP
php使用环形链表解决约瑟夫问题完整示例
Aug 07 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 图像尺寸调整代码
2010/05/26 PHP
php中sql注入漏洞示例 sql注入漏洞修复
2014/01/24 PHP
实例简介PHP的一些高级面向对象编程的特性
2015/11/27 PHP
php实现的一段简单概率相关代码
2016/05/30 PHP
javascript的数据类型、字面量、变量介绍
2012/05/23 Javascript
jQuery中的$.ajax()方法应用
2014/05/06 Javascript
使用Jquery实现每日签到功能
2015/04/03 Javascript
jquery实现点击向下展开菜单项(伸缩导航)效果
2015/08/22 Javascript
仿百度换肤功能的简单实例代码
2016/07/11 Javascript
AngularJS动态生成div的ID源码解析
2016/08/29 Javascript
jquery.validate表单验证插件使用方法解析
2016/11/07 Javascript
原生JS实现的多个彩色小球跟随鼠标移动动画效果示例
2018/02/01 Javascript
Vue2.0 事件的广播与接收(观察者模式)
2018/03/14 Javascript
p5.js入门教程之图片加载
2018/03/20 Javascript
vue项目部署到Apache服务器中遇到的问题解决
2018/08/24 Javascript
微信用户访问小程序的登录过程详解
2019/09/20 Javascript
javascript随机变色实例代码
2019/10/15 Javascript
JavaScript手写数组的常用函数总结
2020/11/22 Javascript
实例解析Python中的__new__特殊方法
2016/06/02 Python
Python实现简单过滤文本段的方法
2017/05/24 Python
Python决策树分类算法学习
2017/12/22 Python
Python基于高斯消元法计算线性方程组示例
2018/01/17 Python
python爬取m3u8连接的视频
2018/02/28 Python
python2 与 pyhton3的输入语句写法小结
2018/09/10 Python
Python字典中的键映射多个值的方法(列表或者集合)
2018/10/17 Python
python aiohttp的使用详解
2019/06/20 Python
python用requests实现http请求代码实例
2019/10/31 Python
Tensorflow 1.0之后模型文件、权重数值的读取方式
2020/02/12 Python
python实现信号时域统计特征提取代码
2020/02/26 Python
python 6种方法实现单例模式
2020/12/15 Python
雅诗兰黛旗下走天然植物路线的彩妆品牌:Prescriptives
2016/08/14 全球购物
大学本科毕业生求职信范文
2013/12/18 职场文书
甜品店创业计划书
2014/09/21 职场文书
关于元旦的广播稿2016
2015/12/17 职场文书
浅谈如何提高PHP代码质量之单元测试
2021/05/28 PHP
Python类方法总结讲解
2021/07/26 Python