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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JVM: GC过程总结(minor GC 和 Full GC)「建议收藏」

    一minorGC和FullGC区别新生代GC(MinorGC):指发生新生代的的垃圾收集动作,MinorGC非常频繁,回收速度一般也比较快。老年代GC(MajorGC/FullGC):指发生在老年代的GC,出现了MajorGC经常会伴随至少一次的MinorGC(并非绝对),MajorGC的速度一般会比MinorGC的慢10倍以上。二minorGC过程详解1在初始阶段,新创建的对象被分配到Eden区,survivor的两块空间都为空。

    2022年4月12日
    39
  • 一起学习android图片四舍五入图片集资源 (28)

    一起学习android图片四舍五入图片集资源 (28)

    2022年1月16日
    32
  • Gridview漂亮的样式

    Gridview漂亮的样式  linkhref=”StyleSheet.css”rel=”stylesheet”type=”text/css”/>linkhref=”GamerGridView.css”rel=”stylesheet”type=”text/css”/> StandardGridViewdeclaration:/par??/cf0/

    2022年9月24日
    3
  • Android开发环境搭建(图文教程)

    Android开发环境搭建(图文教程)

    2021年11月28日
    39
  • DelphiXE7取代默认的ActionList编辑器

    DelphiXE7取代默认的ActionList编辑器DelphiXE7取代默认的ActionList编辑器。其他XE版本应该可以用。Delphi5或7需要修改代码。默认的编辑器只能看到Action的名称,不能看到标题,因此做了这个编辑器。增加了以下功能:1、ListView显示Action的标题,图标,快捷键。2、Action自动命名的尾部序号宽度为3位数字。3、快速选择标准Action。4、收藏Action。代码修改自ECont…

    2022年8月30日
    5
  • Matlabinf_matlab怎么定义函数

    Matlabinf_matlab怎么定义函数函数功能在图像处理中,该函数用于获取一张图片的具体信息。这些具体信息包括图片的格式、尺寸、颜色数量、修改时间等等。在matlab的命令窗口中键入docimfinfo或者helpimfinfo都可以得到该函数的帮助信息。调用方式info=imfinfo(filename,fmt)info=imfinfo(filename)程序示例  下面这个程序用于获取位图相关信息。该函数获取位图文件头信…

    2022年10月5日
    2

发表回复

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

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