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 破解防盗链图片函数
Dec 09 PHP
PHP has encountered an Access Violation at 7C94BD02解决方法
Aug 24 PHP
PHP has encountered an Access Violation 错误的解决方法
Jan 17 PHP
防止本地用户用fsockopen DDOS攻击对策
Nov 02 PHP
php的declare控制符和ticks教程(附示例)
Mar 21 PHP
ThinkPHP3.1新特性之查询条件预处理简介
Jun 19 PHP
PHP实现Soap通讯的方法
Nov 03 PHP
总结PHP中数值计算的注意事项
Aug 14 PHP
在IIS下安装PHP扩展的方法(超简单)
Apr 10 PHP
PHP数据库操作三:redis用法分析
Aug 16 PHP
PHP封装的完整分页类示例
Aug 21 PHP
基于php+MySql实现学生信息管理系统实例
Aug 04 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
PHP5中实现多态的两种方法实例分享
2014/04/21 PHP
Thinkphp实现MySQL读写分离操作示例
2014/06/25 PHP
yii实现使用CUploadedFile上传文件的方法
2015/12/28 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
2016/03/21 PHP
Yii2框架BootStrap样式的深入理解
2016/11/07 PHP
利用PHPExcel实现Excel文件的写入和读取
2017/04/26 PHP
flash javascript之间的通讯方法小结
2008/12/20 Javascript
Javascript var变量隐式声明方法
2009/10/19 Javascript
javascript demo 基本技巧
2009/12/18 Javascript
一个基于jquery的图片切换效果
2010/07/06 Javascript
Bookmarklet实现启动jQuery(模仿 云输入法)
2010/09/15 Javascript
理解Javascript_12_执行模型浅析
2010/10/18 Javascript
网页编辑器ckeditor和ckfinder配置步骤分享
2012/05/24 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
extjs 如何给column 加上提示
2014/07/29 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件包装
2015/11/20 Javascript
JavaScript绑定事件监听函数的通用方法
2016/05/14 Javascript
js实现的xml对象转json功能示例
2016/12/24 Javascript
jQuery实现可移动选项的左右下拉列表示例
2016/12/26 Javascript
JavaScript中Promise的使用详解
2017/02/26 Javascript
vue-resource调用promise取数据方式详解
2017/07/21 Javascript
vue设置全局访问接口API地址操作
2020/08/14 Javascript
基于JS实现快速读取TXT文件
2020/08/25 Javascript
Python3遍历目录树实现方法
2015/05/22 Python
Python中免验证跳转到内容页的实例代码
2020/10/23 Python
浏览器实现移动端高性能css3动画(开启gpu加速)
2013/12/23 HTML / CSS
Staples美国官方网站:办公用品一站式采购
2016/07/28 全球购物
班级聚会策划书
2014/01/16 职场文书
校园活动策划方案
2014/06/13 职场文书
销售类求职信
2014/06/13 职场文书
工程部岗位职责
2015/02/10 职场文书
求职信格式范文
2015/03/19 职场文书
2015年乡镇扶贫工作总结
2015/04/08 职场文书
2015年建筑工程工作总结
2015/05/13 职场文书
负责培养人意见
2015/06/05 职场文书
生死牛玉儒观后感
2015/06/11 职场文书