php反射类ReflectionClass用法分析
发布时间:2020-12-12 21:30:32 所属栏目:PHP教程 来源:网络整理
导读:本篇章节讲解php反射类ReflectionClass用法。供大家参考研究具体如下: 先来看一段代码: implementsInterface('Iplugin')) { $plugins[] = $reflectionClass; } } return $plugins;}function computeMenu(){ $menu = array(); foreach(findPlugin
本篇章节讲解php反射类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 代码如下: 'MycoolPlugin','link' => '/MyCoolPlugin'));
}
public static
function getArticles()
{
return array(array('path' => '/MycoolPlugin','title' => 'This is a really cool article','text' => xxxxxxxxx));
}
}
上述代码是php反射类的一个应用。 什么是php反射类,顾名思义,可以理解为一个类的映射。 举个例子: 至于$class 这反射类里有什么东东,可以查看手册,这里不详解了 newInstance(); //相当于实例化 fuc 类
$fuc->ec(); //执行 fuc 里的方法ec
/*最后输出:我是一个类*/
其中还有一些更高级的用法 getmethod('ec'); //获取fuc 类中的ec方法
$fuc=$class->newInstance(); //实例化
$ec->invoke($fuc); //执行ec 方法
上面的过程很熟悉吧。其实和调用对象的方法类似 只不过这里是反着来的,方法在前,对象在后 补充:php代码在线格式化美化工具: 更多关于PHP相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》、《》、《》、《》及《》 希望本文所述对大家PHP程序设计有所帮助。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |