php利用反射实现插件机制的方法
本文实例讲述了php利用反射实现插件机制的方法。分享给大家供大家参考。具体实现方法如下:
<?php /** *@name PHP反射API--利用反射技术实现的插件系统架构 */ interfaceIplugin{ publicstaticfunctiongetName(); } functionfindPlugins(){ $plugins=array(); foreach(get_declared_classes()as$class){ $reflectionClass=newReflectionClass($class); if($reflectionClass->implementsInterface('Iplugin')){ $plugins[]=$reflectionClass; } } return$plugins; } functioncomputeMenu(){ $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; } functioncomputeArticles(){ $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; } classMycoolPuginimplementsIplugin{ publicstaticfunctiongetName(){ return'MycoolPlugin'; } publicstaticfunctiongetMenuItems(){ returnarray(array('description'=>'MycoolPlugin','link'=>'/MyCoolPlugin')); } publicstaticfunctiongetArticles(){ returnarray(array('path'=>'/MycoolPlugin','title'=>'Thisisareallycoolarticle','text'=>'xxxxxxxxx')); } } $menu=computeMenu(); $articles =computeArticles(); print_r($menu); print_r($articles);
希望本文所述对大家的php程序设计有所帮助。