网络编程 
首页 > 网络编程 > 浏览文章

php利用反射实现插件机制的方法

(编辑:jimmy 日期: 2025/11/13 浏览:3 次 )

本文实例讲述了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检测apache mod_rewrite模块是否安装的方法
一句话新闻
高通与谷歌联手!首款骁龙PC优化Chrome浏览器发布
高通和谷歌日前宣布,推出首次面向搭载骁龙的Windows PC的优化版Chrome浏览器。
在对骁龙X Elite参考设计的初步测试中,全新的Chrome浏览器在Speedometer 2.1基准测试中实现了显著的性能提升。
预计在2024年年中之前,搭载骁龙X Elite计算平台的PC将面世。该浏览器的提前问世,有助于骁龙PC问世就获得满血表现。
谷歌高级副总裁Hiroshi Lockheimer表示,此次与高通的合作将有助于确保Chrome用户在当前ARM兼容的PC上获得最佳的浏览体验。