《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程序設計有所贊助.PHP編程
《PHP編程:php利用反射實現插件機制的方法》是否對您有啟發,歡迎查看更多與《PHP編程:php利用反射實現插件機制的方法》相關教程,學精學透。維易PHP學院為您提供精彩教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/11734.html