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文件上传实例详解!!!
Jan 02 PHP
Windows下利用Gvim写PHP产生中文乱码问题解决方法
Apr 20 PHP
php中使用临时表查询数据的一个例子
Feb 03 PHP
单台服务器的PHP进程之间实现共享内存的方法
Jun 13 PHP
php批量删除cookie的简单实现方法
Jan 26 PHP
Zend Framework自定义Helper类相关注意事项总结
Mar 14 PHP
PHP线程的内存回收问题
Jul 08 PHP
详谈PHP程序Laravel 5框架的优化技巧
Jul 18 PHP
让Laravel API永远返回JSON格式响应的方法示例
Sep 05 PHP
PHP智能识别收货地址信息实例
Jan 05 PHP
PHP 实现文件压缩解压操作的方法
Jun 14 PHP
PHP+redis实现微博的拉模型案例详解
Jul 10 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扩展vld查看PHP opcode操作步骤
2013/03/04 PHP
PHP批量查询WordPress留言者E-mail地址实现方法
2015/02/15 PHP
jquery中event对象属性与方法小结
2013/12/18 Javascript
jQuery中[attribute*=value]选择器用法实例
2014/12/31 Javascript
JavaScript实现删除,移动和复制文件的方法
2015/08/05 Javascript
js实现带圆角的多级下拉菜单效果
2015/08/28 Javascript
JavaScript实现自动生成网页元素功能(按钮、文本等)
2015/11/21 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
2016/08/31 Javascript
JS实现电商放大镜效果
2017/08/24 Javascript
JS与HTML结合实现流程进度展示条思路详解
2017/09/03 Javascript
JS实现去除数组中重复json的方法示例
2017/12/21 Javascript
Vue父组件调用子组件事件方法
2018/02/23 Javascript
Javascript 之封装(Package)
2018/09/14 Javascript
浅谈Node 异步IO和事件循环
2019/05/05 Javascript
简单了解小程序+node梳理登陆流程
2019/06/24 Javascript
vue前后分离调起微信支付
2019/07/29 Javascript
[59:00]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第一场 3月7日
2021/03/11 DOTA
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
2018/07/13 Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
2018/07/26 Python
对TensorFlow的assign赋值用法详解
2018/07/30 Python
python实现爬山算法的思路详解
2019/04/09 Python
Python测试Kafka集群(pykafka)实例
2019/12/23 Python
150行python代码实现贪吃蛇游戏
2020/04/24 Python
基于CSS3实现的几个小loading效果
2018/09/27 HTML / CSS
html5 Canvas实现图片旋转的示例
2018/01/15 HTML / CSS
阿里云:Aliyun.com
2017/02/15 全球购物
世界上最大的二手相机店:KEN
2017/05/17 全球购物
法学毕业生自我鉴定
2013/11/08 职场文书
安全资料员岗位职责
2013/12/14 职场文书
函授毕业个人自我评价
2014/02/20 职场文书
门卫岗位职责说明书
2014/08/18 职场文书
学用政策心得体会
2014/09/10 职场文书
高中运动会广播稿
2015/08/19 职场文书
2016年毕业实习心得体会范文
2015/10/09 职场文书
奖学金申请书(范文)
2019/08/14 职场文书
JavaScript实现酷炫的鼠标拖尾特效
2022/02/18 Javascript