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()
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 类
php实例代码详解$fuc->ec(); //执⾏ fuc ⾥的⽅法ec
/*最后输出:我是⼀个类*/
其中还有⼀些更⾼级的⽤法
$ec=$class->getmethod('ec'); //获取fuc 类中的ec⽅法
$fuc=$class->newInstance(); //实例化
$ec->invoke($fuc); //执⾏ec ⽅法
上⾯的过程很熟悉吧。其实和调⽤对象的⽅法类似只不过这⾥是反着来的,⽅法在前,对象在后
以上就是php反射类ReflectionClass⽤法实例详解的详细内容,更多请关注php中⽂⽹其它相关⽂章!转载地址:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论