一起源码网

  • www.171739.xyz
  • 全球最大的互联网技术和资源下载平台
搜索
猜你喜欢
查看: 3815|回复: 1
打印 上一主题 下一主题

php如何利用反射实现插件代码示例

[复制链接]

0

主题

0

帖子

1万

积分

钻石会员

Rank: 8Rank: 8

积分
17424
QQ
跳转到指定楼层
楼主
发表于 2020-3-16 00:30 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
这篇文章主要介绍了php利用反射实现插件机制的方法,涉及php反射机制与插件的实现技巧,需要的朋友可以参考下

本文实例讲述了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);

分享到:  QQ好友和群QQ好友和群
收藏收藏
回复

使用道具 举报

0

主题

12

帖子

2万

积分

钻石会员

Rank: 8Rank: 8

积分
23532
QQ
沙发
发表于 2022-9-7 16:54 来自手机 | 只看该作者
怎么使用源代码下载文件
回复

使用道具 举报

一起源码让程序更轻更快

www.171739.xyz

工作时间 周一至周六 8:00-17:30

侵权处理

客服QQ点击咨询

关注抖音号

定期抽VIP

Copyright © 2016-2021 https://www.171739.xyz/ 滇ICP备13200218号

快速回复 返回顶部 返回列表