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 mail 通过Windows的SMTP发送邮件失败的解决方案
May 27 PHP
php上传文件的增强函数
Jul 21 PHP
jQuery 源码分析笔记
May 25 PHP
php继承的一个应用
Sep 06 PHP
PHP中比较两个字符串找出第一个不同字符位置例子
Apr 08 PHP
Thinkphp搭建包括JS多语言的多语言项目实现方法
Nov 24 PHP
php eval函数一句话木马代码
May 21 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
Aug 31 PHP
tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
May 28 PHP
PHP实现与java 通信的插件使用教程
Aug 11 PHP
Laravel5.5 动态切换多语言的操作方式
Oct 25 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
Apr 07 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支持页面回退的两种方法
2008/01/10 PHP
js 禁止选择功能实现代码(兼容IE/Firefox)
2010/04/23 Javascript
iphone safari不支持position fixed的解决方法
2012/05/04 Javascript
JavaScript转换农历类实现及调用方法
2013/01/27 Javascript
javascript打印大全(打印页面设置/打印预览代码)
2013/03/29 Javascript
js实现跨域的几种方法汇总(图片ping、JSONP和CORS)
2015/10/25 Javascript
跟我学习javascript的作用域与作用域链
2015/11/19 Javascript
js实现增加数字显示的环形进度条效果
2017/02/05 Javascript
Vue2.0表单校验组件vee-validate的使用详解
2017/05/02 Javascript
javascript实现电脑和手机版样式切换
2017/11/10 Javascript
使用 Node.js 开发资讯爬虫流程
2018/01/07 Javascript
vue 虚拟dom的patch源码分析
2018/03/01 Javascript
在小程序开发中使用npm的方法
2018/10/17 Javascript
Vue的props父传子的示例代码
2020/05/20 Javascript
浅谈Vue使用Cascader级联选择器数据回显中的坑
2020/10/31 Javascript
[13:25]VP vs VICI (BO3)
2018/06/07 DOTA
[00:59]DOTA2背景故事第二期之四大基本法则
2020/07/07 DOTA
Python编码爬坑指南(必看)
2016/06/10 Python
通过5个知识点轻松搞定Python的作用域
2016/09/09 Python
Python之多线程爬虫抓取网页图片的示例代码
2018/01/10 Python
Python爬虫实现(伪)球迷速成
2018/06/10 Python
python selenium firefox使用详解
2019/02/26 Python
解决tensorflow训练时内存持续增加并占满的问题
2020/01/19 Python
Python中bisect的用法及示例详解
2020/07/20 Python
Python如何爬取b站热门视频并导入Excel
2020/08/10 Python
英国男女豪华配饰和礼品网站:Black.co.uk
2020/02/28 全球购物
动漫专业高职生职业生涯规划书
2014/02/15 职场文书
奥巴马胜选演讲稿
2014/05/15 职场文书
中学生社会实践活动总结
2014/07/03 职场文书
2016年情人节广告语
2016/01/28 职场文书
七年级作文之《我和我的祖国》观后感作文
2019/10/18 职场文书
基于Nginx实现限制某IP短时间访问次数
2021/03/31 Servers
MySQL中distinct与group by之间的性能进行比较
2021/05/26 MySQL
CSS3实现指纹特效代码
2022/03/17 HTML / CSS
Python利用capstone实现反汇编
2022/04/06 Python
python小型的音频操作库mp3Play
2022/04/24 Python