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中使用Oracle数据库(1)
Oct 09 PHP
我的论坛源代码(二)
Oct 09 PHP
JpGraph php柱状图使用介绍
Aug 23 PHP
屏蔽机器人从你的网站搜取email地址的php代码
Nov 14 PHP
php cli 小技巧
Jun 03 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
Apr 27 PHP
实例讲解php数据访问
May 09 PHP
Zend Framework前端控制器用法示例
Dec 11 PHP
Yii 2.0中场景的使用教程
Jun 02 PHP
Laravel模型事件的实现原理详解
Mar 14 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
Feb 18 PHP
Laravel中如何轻松容易的输出完整的SQL语句
Jul 26 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
Codeigniter+PHPExcel实现导出数据到Excel文件
2014/06/12 PHP
CI框架入门示例之数据库取数据完整实现方法
2014/11/05 PHP
PHP抽奖算法程序代码分享
2015/10/08 PHP
PHP 读取大文件并显示的简单实例(推荐)
2016/08/12 PHP
PDO::rollBack讲解
2019/01/29 PHP
滚动经典最新话题[prototype框架]下编写
2006/10/03 Javascript
超轻量级的基于jquery的三级展开列表
2011/04/26 Javascript
node.js中的Socket.IO使用实例
2014/11/04 Javascript
js实现全国省份城市级联下拉菜单效果代码
2015/09/07 Javascript
JS模拟实现Select效果代码
2015/09/24 Javascript
JS正则匹配URL网址的方法(可匹配www,http开头的一切网址)
2017/01/06 Javascript
js鼠标移动时禁止选中文字
2017/02/19 Javascript
使用Bootstrap打造特色进度条效果
2017/05/02 Javascript
JS监控关闭浏览器操作的实例详解
2017/09/12 Javascript
js将键值对字符串转为json字符串的方法
2018/03/30 Javascript
详解Vue项目编译后部署在非网站根目录的解决方案
2018/04/26 Javascript
vue-cli脚手架搭建的项目去除eslint验证的方法
2018/09/29 Javascript
vue实现简单跑马灯效果
2020/05/25 Javascript
探索浏览器页面关闭window.close()的使用详解
2020/08/21 Javascript
[01:41]DOTA2超级联赛专访YYF 称一辈子难忘TI2
2013/05/28 DOTA
一个简单的python程序实例(通讯录)
2013/11/29 Python
详解Python中的元组与逻辑运算符
2015/10/13 Python
浅谈Python数据类型之间的转换
2016/06/08 Python
python简单读取大文件的方法
2016/07/01 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
2019/09/07 Python
SHEIN香港:价格实惠的女性时尚服装
2018/08/14 全球购物
香港中原电器网上商店:Chung Yuen
2019/06/26 全球购物
戴尔马来西亚官网:Dell Malaysia
2020/05/02 全球购物
师范学院教师自荐书
2014/01/31 职场文书
酒后驾车标语
2014/06/30 职场文书
工作证明英文模板
2014/10/21 职场文书
企业群众路线教育实践活动心得体会
2014/11/03 职场文书
毕业论文答辩稿范文
2015/06/23 职场文书
2016年秋季开学典礼新闻稿
2015/11/25 职场文书
springboot 启动如何排除某些bean的注入
2021/08/02 Java/Android
Java Spring 控制反转(IOC)容器详解
2021/10/05 Java/Android