程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php利用反射實現插件機制的方法

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程序設計有所幫助。

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved