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类
Nov 25 PHP
默默小谈PHP&amp;MYSQL分页原理及实现
Jan 02 PHP
11个PHP 分页脚本推荐
Aug 15 PHP
php判断正常访问和外部访问的示例
Feb 10 PHP
PHP反向代理类代码
Aug 15 PHP
php+jQuery.uploadify实现文件上传教程
Dec 26 PHP
ThinkPHP表单数据智能写入create方法实例分析
Sep 27 PHP
php实现图片以base64显示的方法
Oct 13 PHP
php redis实现文章发布系统(用户投票系统)
Mar 04 PHP
PHP实现自动发送邮件功能代码(qq 邮箱)
Aug 18 PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
Aug 05 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
Oct 15 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引用返回与取消引用的详解
2013/06/08 PHP
PHP文件去掉PHP注释空格的函数分析(PHP代码压缩)
2013/07/02 PHP
php二分查找二种实现示例
2014/03/12 PHP
给WordPress中的留言加上楼层号的PHP代码实例
2015/12/14 PHP
PHP按符号截取字符串的指定部分的实现方法
2018/09/10 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
2019/06/13 PHP
javascript 处理事件绑定的一些兼容写法
2009/12/24 Javascript
AJAX的跨域与JSONP(为文章自动添加短址的功能)
2010/01/17 Javascript
javascript闭包的理解和实例
2010/08/12 Javascript
json数据处理技巧(字段带空格、增加字段、排序等等)
2013/06/14 Javascript
js实现按钮控制图片360度翻转特效的方法
2015/02/17 Javascript
zTree插件下拉树使用入门教程
2016/04/11 Javascript
js style.display=block显示布局错乱问题的解决方法
2016/09/21 Javascript
JavaScript中关键字 in 的使用方法详解
2016/10/17 Javascript
bootstrap警告框使用方法解析
2017/01/13 Javascript
canvas知识总结
2017/01/25 Javascript
JavaScript中offsetWidth的bug及解决方法
2017/05/17 Javascript
Vue的elementUI实现自定义主题方法
2018/02/23 Javascript
JS实现前端页面的搜索功能
2018/06/12 Javascript
vue-router+nginx 非根路径配置方法
2018/06/30 Javascript
vue动画打包后失效问题的解决方法
2018/09/18 Javascript
vue 2.8.2版本配置刚进入时候的默认页面方法
2018/09/21 Javascript
用javascript实现倒计时效果
2021/02/09 Javascript
[04:01]2014DOTA2国际邀请赛 TITAN告别Ohaiyo期望明年再战
2014/07/15 DOTA
python pdb调试方法分享
2014/01/21 Python
跟老齐学Python之Python文档
2014/10/10 Python
Python多线程编程(五):死锁的形成
2015/04/05 Python
python下的opencv画矩形和文字注释的实现方法
2019/07/09 Python
PyTorch笔记之scatter()函数的使用
2020/02/12 Python
大数据分析用java还是Python
2020/07/06 Python
一文详述 Python 中的 property 语法
2020/09/01 Python
介绍一下MYSQL常用的优化技巧
2012/10/25 面试题
电子信息毕业生自荐信
2013/11/16 职场文书
淘宝文案策划岗位职责
2015/04/14 职场文书
2015年司法所工作总结
2015/04/27 职场文书
浅析Python中的随机采样和概率分布
2021/12/06 Python