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 相关文章推荐
怎样在UNIX系统下安装MySQL
Oct 09 PHP
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
Oct 12 PHP
php无限极分类实现的两种解决方法
Apr 28 PHP
PHP时间格式控制符对照表分享
Jul 23 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
Sep 16 PHP
php数组分页实现方法
Apr 30 PHP
Smarty保留变量用法分析
May 23 PHP
php 判断字符串编码是utf-8 或gb2312实例
Nov 01 PHP
PHP单例模式详解及实例代码
Dec 21 PHP
浅谈PHP的$_SERVER[SERVER_NAME]
Feb 04 PHP
老生常谈PHP面向对象之解释器模式
May 17 PHP
PHP数组内存利用率低和弱类型详细解读
Aug 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
跟我学Laravel之安装Laravel
2014/10/15 PHP
php利用smtp类实现电子邮件发送
2015/10/30 PHP
php实现在站点里面添加邮件发送的功能
2020/04/28 PHP
PHP Laravel中的Trait使用方法
2019/01/20 PHP
基于PHP实现邮箱验证激活过程详解
2020/10/28 PHP
网页右键ie不支持event.preventDefault和event.returnValue (需要加window)
2013/02/22 Javascript
javascript制作坦克大战全纪录(1)
2014/11/27 Javascript
去除字符串左右两边的空格(实现代码)
2016/05/12 Javascript
基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)
2016/09/02 Javascript
windows下vue.js开发环境搭建教程
2017/03/20 Javascript
基于Bootstrap分页的实例讲解(必看篇)
2017/07/04 Javascript
详解Vue SSR( Vue2 + Koa2 + Webpack4)配置指南
2018/11/13 Javascript
微信小程序获取用户绑定手机号方法示例
2019/07/21 Javascript
js 实现ajax发送步骤过程详解
2019/07/25 Javascript
[54:30]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python 实现文件的递归拷贝实现代码
2012/08/02 Python
Python使用flask框架操作sqlite3的两种方式
2018/01/31 Python
Python从文件中读取数据的方法讲解
2019/02/14 Python
Python Django form 组件动态从数据库取choices数据实例
2020/05/19 Python
墨西哥运动服饰和鞋网上商店:Netshoes墨西哥
2016/07/28 全球购物
香港最新科技与优质家居产品购物网站:J SELECT
2018/08/21 全球购物
英国家喻户晓的家居商店:The Range
2019/03/25 全球购物
澳大利亚宠物食品和用品商店:PETstock
2020/01/02 全球购物
机械制造与自动化应届生求职信
2013/11/16 职场文书
CAD制图设计师自荐信
2014/01/29 职场文书
中学劳技课教师的自我评价
2014/02/05 职场文书
英语求职信范文
2014/05/23 职场文书
社区领导班子四风问题原因分析及整改措施
2014/09/28 职场文书
初中毕业生自我评价
2015/03/02 职场文书
综合素质评价个性与发展自我评价
2015/03/06 职场文书
综合办公室主任岗位职责
2015/04/01 职场文书
创建文明城市倡议书
2015/04/28 职场文书
同事去世追悼词
2015/06/23 职场文书
创业计划书之溜冰场
2019/10/25 职场文书
导游词之杭州岳王庙
2019/11/13 职场文书
2022漫威和DC电影上映作品
2022/04/05 欧美动漫