博客
关于我
反射查找插件
阅读量:415 次
发布时间:2019-03-06

本文共 4181 字,大约阅读时间需要 13 分钟。

';//定义一个测试反射的类class CQH{ public $name = 'cqh'; private $country= 'china'; const gender = 'man'; public function say() { echo 'hello,world'; } private function eat() { echo 'eat'; } public static function drink() { echo 'drink'; }}/* //打印所有的反射接口 Reflection::export(new ReflectionExtension('reflection')); *//* //反射创建所有的PHP类的导出结果,get_declared_classes可以获取所有已声明的类 foreach(get_declared_classes() as $class) { Reflection::export(new ReflectionClass($class)); } *//* //只反射用户自己定义的类 foreach(get_declared_classes() as $class) { $reflectionClass = new ReflectionClass($class); if($reflectionClass->isUserDefined()) { Reflection::export($reflectionClass); } } */ /********************************使用反射查找插件********************************/ //定义一个接口 interface IPlugin { public static function getName(); } //查到所有实现了IPlugin接口的类 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 $plugins) { $reflectionMethod = $plugins->getMethod('getMenuItems'); if($reflectionMethod->isStatic()) { $items = $reflectionMethod->invoke(null); } else { //如果这个方法不是静态的,我们需要一个实例 $pluginsInstance = $plugins->newInstance(); $items = $reflectionMethod->invoke($pluginsInstance); } $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; } //确定侧边栏的的类的成员 function computeSidebars() { $sidebars = array(); foreach(findPlugins() as $plugin) { if($plugin->hasMethod('getSidebars')) { $reflectionMethod = $plugin->getMethod('getSidebars'); if($reflectionMethod->isStatic()) { $items = $reflectionMethod->invoke(null); } else { $pluginInstance = $plugin->newInstance(); $items = $reflectionMethod->invoke($pluginInstance); } $sidebars = array_merge($sidebars,$items); } } return $sidebars; } //创建一个实现了Iplugin接口的类 class MyCoolPlugin 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' => 'This article is cool because...' )); } } $menu = computeMenu(); $sidebars = computeSidebars(); $articles = computeArticles(); print_r($menu); print_r($sidebars); print_r($articles); echo '';?>

转载地址:http://lblkz.baihongyu.com/

你可能感兴趣的文章
mysql interval显示条件值_MySQL INTERVAL关键字可以使用哪些不同的单位值?
查看>>
Mysql join原理
查看>>
MySQL Join算法与调优白皮书(二)
查看>>
Mysql order by与limit混用陷阱
查看>>
Mysql order by与limit混用陷阱
查看>>
mysql order by多个字段排序
查看>>
MySQL Order By实现原理分析和Filesort优化
查看>>
mysql problems
查看>>
mysql replace first,MySQL中处理各种重复的一些方法
查看>>
MySQL replace函数替换字符串语句的用法(mysql字符串替换)
查看>>
mysql replace用法
查看>>
Mysql Row_Format 参数讲解
查看>>
mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
查看>>
MySQL Server 5.5安装记录
查看>>
mysql server has gone away
查看>>
mysql slave 停了_slave 停止。求解决方法
查看>>
MySQL SQL 优化指南:主键、ORDER BY、GROUP BY 和 UPDATE 优化详解
查看>>
MYSQL sql语句针对数据记录时间范围查询的效率对比
查看>>
mysql sum 没返回,如果没有找到任何值,我如何在MySQL中获得SUM函数以返回'0'?
查看>>
mysql Timestamp时间隔了8小时
查看>>