国产探花免费观看_亚洲丰满少妇自慰呻吟_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程序設計有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜宾市| 隆昌县| 墨脱县| 织金县| 长宁县| 富川| 桐庐县| 玉屏| 蒙自县| 罗城| 太白县| 阜南县| 远安县| 阳曲县| 宽城| 临沧市| 河西区| 诏安县| 云南省| 霍山县| 漳平市| 邵武市| 天柱县| 砚山县| 理塘县| 华池县| 思茅市| 武冈市| 五原县| 辽中县| 金溪县| 克拉玛依市| 于田县| 大关县| 尚志市| 富民县| 保山市| 阿坝县| 成安县| 商洛市| 清远市|