国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

php利用反射實現插件機制的方法

2024-05-04 23:32:28
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了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);

 

希望本文所述對大家的php程序設計有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 和林格尔县| 涿州市| 菏泽市| 新闻| 泰兴市| 安阳市| 大港区| 洞口县| 涞源县| 安徽省| 卫辉市| 和龙市| 漳浦县| 焦作市| 杭锦后旗| 新沂市| 隆化县| 盐池县| 石屏县| 丹棱县| 正阳县| 麟游县| 定边县| 关岭| 漯河市| 芦溪县| 贵德县| 怀宁县| 赤壁市| 陇南市| 化隆| 保亭| 新竹县| 汉阴县| 平塘县| 庆安县| 洪雅县| 博客| 乳源| 诸暨市| 天柱县|