您好,欢迎访问一九零五行业门户网

php反射类ReflectionClass用法实例详解

这篇文章主要介绍了php反射类reflectionclass用法,结合实例形式较为详细的分析了php反射类的概念、功能与具体使用方法,需要的朋友可以参考下
本文实例讲述了php反射类reflectionclass用法。分享给大家供大家参考,具体如下:
先来看一段代码:
/** * @name php反射api--利用反射技术实现的插件系统架构 * @author :phpcq.com */ 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; } require_once('plugin.php'); $menu = computemenu(); $articles = computearticles(); print_r($menu); print_r($articles);
plugin.php 代码如下:
<?php 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)); } }
上述代码是php反射类的一个应用。
什么是php反射类,顾名思义,可以理解为一个类的映射。
举个例子:
class fuc { //定义一个类 static function ec() { echo '我是一个类'; } } $class=new reflectionclass('fuc'); //建立 fuc这个类的反射类
至于$class 这反射类里有什么东东,可以查看手册,这里不详解了
$fuc=$class->newinstance(); //相当于实例化 fuc 类 $fuc->ec(); //执行 fuc 里的方法ec /*最后输出:我是一个类*/
其中还有一些更高级的用法
$ec=$class->getmethod('ec'); //获取fuc 类中的ec方法 $fuc=$class->newinstance(); //实例化 $ec->invoke($fuc); //执行ec 方法
上面的过程很熟悉吧。其实和调用对象的方法类似只不过这里是反着来的,方法在前,对象在后
以上就是php反射类reflectionclass用法实例详解的详细内容。
其它类似信息

推荐信息