博客
关于我
反射查找插件
阅读量: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 数据类型一日期
查看>>
MySQL 数据类型和属性
查看>>
Mysql 整形列的字节与存储范围
查看>>
MySQL 是如何加锁的?
查看>>
mysql 更新子表_mysql 在update中实现子查询的方式
查看>>
MySQL 有什么优点?
查看>>
mysql 权限整理记录
查看>>
mysql 权限登录问题:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
查看>>
mysql 查看锁_阿里/美团/字节面试官必问的Mysql锁机制,你真的明白吗
查看>>
MySql 查询以逗号分隔的字符串的方法(正则)
查看>>
MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
查看>>
mysql 死锁 Deadlock found when trying to get lock; try restarting transaction
查看>>
mysql 死锁(先delete 后insert)日志分析
查看>>
MySQL 死锁了,怎么办?
查看>>
MySQL 深度分页性能急剧下降,该如何优化?
查看>>
MySQL 深度分页性能急剧下降,该如何优化?
查看>>
MySQL 添加列,修改列,删除列
查看>>
mysql 添加索引
查看>>
MySQL 添加索引,删除索引及其用法
查看>>
MySQL 用 limit 为什么会影响性能?
查看>>