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 相关文章推荐
PHP5.2下chunk_split()函数整数溢出漏洞 分析
Jun 06 PHP
PHP实时显示输出
Oct 02 PHP
Session保存到数据库的php类分享
Oct 24 PHP
php中的Base62类(适用于数值转字符串)
Aug 12 PHP
深入讲解PHP Session及如何保持其不过期的方法
Aug 18 PHP
注意!PHP 7中不要做的10件事
Sep 18 PHP
php使用高斯算法实现图片的模糊处理功能示例
Nov 11 PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
Nov 16 PHP
PHP后期静态绑定实例浅析
Dec 21 PHP
Laravel find in set排序实例
Oct 09 PHP
laravel自定义分页的实现案例offset()和limit()
Oct 15 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
Jan 26 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实现字符串翻转的方法
2015/03/27 PHP
php实现猴子选大王问题算法实例
2015/04/20 PHP
js限制textarea每行输入字符串长度的代码
2012/10/31 Javascript
jQuery移动和复制dom节点实用DOM操作案例
2012/12/17 Javascript
深入理解Javascript作用域与变量提升
2013/12/09 Javascript
jQuery拖拽插件gridster使用指南
2015/04/21 Javascript
javascript高级编程之函数表达式 递归和闭包函数
2015/11/29 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
2016/02/19 Javascript
javascript拖拽应用实例(二)
2016/03/25 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
2016/06/03 Javascript
利用JavaScript判断浏览器类型及版本
2016/08/23 Javascript
Ionic2系列之使用DeepLinker实现指定页面URL
2016/11/21 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(放大缩小)
2016/12/02 Javascript
JS实现含有中文字符串的友好截取功能分析
2017/03/13 Javascript
ES6新特性之Object的变化分析
2017/03/31 Javascript
JS实现队列的先进先出功能示例
2017/05/10 Javascript
nodejs中art-template模板语法的引入及冲突解决方案
2017/11/07 NodeJs
python中管道用法入门实例
2015/06/04 Python
Python2.x版本中基本的中文编码问题解决
2015/10/12 Python
python并发编程之多进程、多线程、异步和协程详解
2016/10/28 Python
python数据结构链表之单向链表(实例讲解)
2017/07/25 Python
Django REST为文件属性输出完整URL的方法
2017/12/18 Python
Python时间序列处理之ARIMA模型的使用讲解
2019/04/02 Python
python或C++读取指定文件夹下的所有图片
2019/08/31 Python
python实现的批量分析xml标签中各个类别个数功能示例
2019/12/30 Python
Keras 数据增强ImageDataGenerator多输入多输出实例
2020/07/03 Python
python 基于卡方值分箱算法的实现示例
2020/07/17 Python
详解CSS3中字体平滑处理和抗锯齿渲染
2017/03/29 HTML / CSS
HTML5仿手机微信聊天界面
2016/03/18 HTML / CSS
html5-canvas中使用clip抠出一个区域的示例代码
2018/05/25 HTML / CSS
委托证明的格式
2014/01/10 职场文书
事业单位辞职信范文
2014/01/19 职场文书
人力资源主管的岗位职责
2014/03/15 职场文书
公司应聘求职信
2014/06/21 职场文书
蛋糕店创业计划书范文
2014/09/21 职场文书
表扬信格式模板
2015/05/05 职场文书