这篇文章主要介绍了php反射类ReflectionClass用法,结合实例形式较为详细的分析了php反射类的概念、功能与具体使用方法,需要的朋友可以参考下
本文实例讲述了php反射类ReflectionClass用法。分享给大家供大家参考,具体如下:
先来看一段代码:
|
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' );
|
至于$class 这反射类里有什么东东,可以查看手册,这里不详解了
|
$fuc = $class ->newInstance();
$fuc ->ec();
|
其中还有一些更高级的用法
|
$ec = $class ->getmethod( 'ec' );
$fuc = $class ->newInstance();
$ec ->invoke( $fuc );
|
上面的过程很熟悉吧。其实和调用对象的方法类似只不过这里是反着来的,方法在前,对象在后
以上就是php反射类ReflectionClass用法实例详解的详细内容,更多请关注php中文网其它相关文章!
转载地址:https://www.php.cn/php-weizijiaocheng-371985.html