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实现像JSP,ASP里Application那样的全局变量
Jan 12 PHP
让PHP COOKIE立即生效,不用刷新就可以使用
Mar 09 PHP
微信扫描二维码登录网站代码示例
Dec 30 PHP
PHPThumb图片处理实例
May 03 PHP
PHP中实现crontab代码分享
Mar 26 PHP
php面向对象值单例模式
May 03 PHP
php实现留言板功能(会话控制)
May 23 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
Sep 16 PHP
php语法检查的方法总结
Jan 21 PHP
利用PHP如何统计Nginx日志的User Agent数据
Mar 06 PHP
PHP实现与java 通信的插件使用教程
Aug 11 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开发者的10个技巧
2011/02/25 PHP
php生成数组的使用示例 php全组合算法
2014/01/16 PHP
PHP链接MySQL的常用扩展函数
2014/10/23 PHP
php实现模拟登陆方正教务系统抓取课表
2015/05/19 PHP
PHP实现生成唯一会员卡号
2015/08/24 PHP
给事件响应函数传参数的四种方式小结
2013/12/05 Javascript
用jquery写的一个万年历(自写)
2014/01/20 Javascript
jQuery对象的selector属性用法实例
2014/12/27 Javascript
JS+CSS实现自动改变切换方向图片幻灯切换效果的方法
2015/03/02 Javascript
深入浅析knockout源码分析之订阅
2016/07/12 Javascript
JavaScript使用键盘输入控制实现数字验证功能
2016/08/19 Javascript
Vue 2.X的状态管理vuex记录详解
2017/03/23 Javascript
BootStrap selectpicker后台动态绑定数据
2017/06/01 Javascript
基于vue.js快速搭建图书管理平台
2017/10/29 Javascript
深入理解nodejs搭建静态服务器(实现命令行)
2019/02/05 NodeJs
详解Vue 换肤方案验证
2019/08/28 Javascript
关于layui 实现点击按钮添加一行(方法渲染创建的table)
2019/09/29 Javascript
[04:48]DOTA2亚洲邀请赛林书豪为VGJ加油
2017/04/01 DOTA
Django框架中render_to_response()函数的使用方法
2015/07/16 Python
利用Python实现命令行版的火车票查看器
2016/08/05 Python
Python简单的制作图片验证码实例
2017/05/31 Python
Django自定义分页效果
2017/06/27 Python
对pandas的dataframe绘图并保存的实现方法
2017/08/05 Python
python线程池threadpool实现篇
2018/04/27 Python
Python中flatten( )函数及函数用法详解
2018/11/02 Python
Python标准库json模块和pickle模块使用详解
2020/03/10 Python
tensorflow2.0的函数签名与图结构(推荐)
2020/04/28 Python
利用python对mysql表做全局模糊搜索并分页实例
2020/07/12 Python
PyCharm+PyQt5+QtDesigner配置详解
2020/08/12 Python
CSS3中利用animation属性创建雪花飘落特效
2014/05/14 HTML / CSS
Made in Design英国:设计家具、照明、家庭装饰和花园家具
2019/09/24 全球购物
Spotahome意大利:公寓和房间出租
2020/02/21 全球购物
咖啡厅创业计划书范本
2014/01/22 职场文书
总裁助理岗位职责
2014/02/17 职场文书
董事长助理工作职责
2014/06/08 职场文书
学生会招新宣传语
2015/07/13 职场文书