php反射类ReflectionClass用法实例详解

php反射类ReflectionClass用法实例详解这篇文章主要介绍了php反射类ReflectionClass用法,结合实例形式较为详细的分析了php反射类的概念、功能与具体使用方法,需要的朋友可以参考下本文实例讲述了php反射类Reflectio

大家好,又见面了,我是你们的朋友全栈君。

这篇文章主要介绍了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用法实例详解的详细内容,更多请关注php中文网其它相关文章!

转载地址:https://www.php.cn/php-weizijiaocheng-371985.html

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154685.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 华为裁员1100人!任正非痛批管理层:这种领导鼠目寸光

    华为裁员1100人!任正非痛批管理层:这种领导鼠目寸光Python实战社群Java实战社群长按识别下方二维码,按需求添加扫码关注添加客服进Python社群▲扫码关注添加客服进Java社群▲华为还是裁员了,一裁就是1100人。距离任正非4.2…

    2022年7月18日
    44
  • Android Activity 生命周期

    Android Activity 生命周期

    2021年8月23日
    92
  • ajax实训总结_培训日记

    ajax实训总结_培训日记今天由梁言兵老师为大家讲解ajax,他首先介绍了什么是web2.0及web2.0的应用。ajax框架:客户端框架:DOJO,bindows,Rico服务器端框架:DWR,JSON,buffalo基础库:prototype.js这次讲解的是buffalo框架。buffalo要通过一个注册文件注册Bean对象,buffalo配置文件中的配置项是“对象实例名=完全限定类名”。客户端代码:varEN…

    2025年10月30日
    4
  • 台式计算机和便携式计算机是替代品吗,iPad能否替代笔记本电脑?这结果我一万个不服!…「建议收藏」

    近年来,随着平板电脑的不断发展,有一个长期存在的问题,平板(文中主要指iPad)是否可以替代传统笔记本电脑?平板电脑和笔记本电脑如今可以做很多事情,最好的平板电脑甚至比一些笔记本电脑功能更强大,但它是一个平板电脑真的是传统的便携式计算机合适的替代品吗?我们看一下这两种平台的设备都可以提供什么,以及哪种平台最适合您的需求!笔记本电脑与平板电脑:便携性!首先,是便携性问题。虽然两种类型的设备都可以随身…

    2022年4月11日
    63
  • linux有必要安装杀毒软件吗_linux杀毒软件企业版

    linux有必要安装杀毒软件吗_linux杀毒软件企业版据有些Linux用户在Linux操作系统下使用360安全卫士国产系统适配专版反馈称:有时会显示有木马,或是误报。比方在Deepin系统中用商店安装的360安全卫士在扫描时报有木马,如下图所示:误报依据经验证,这是误报,如果有Linux用户出现相同的情况,可不需要做其他的处理。判断依据是:木马就是任务栏上的快捷方式?显然不是。同时,360杀毒国产系统适配专版在扫描时也出现误报的情况,如下图:其实在L…

    2022年9月2日
    8
  • nginx 配置ssl

    nginx 配置sslnginx配置ssl

    2022年7月14日
    23

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号