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


相关推荐

  • 腾讯云 上传视频_云点播系统源码

    腾讯云 上传视频_云点播系统源码 web利用腾讯云点播上传视频到云服务器第一步导入&lt;scriptsrc="//imgcache.qq.com/open/qcloud/js/vod/sdk/ugcUploader.js"&gt;&lt;/script&gt;第二步在服务端设置秘钥,我用的是javaee编写一个Signature类 所需jar包http://download.csdn.net/down…

    2025年7月4日
    4
  • 国内外常用公共NTP网络时间同步服务器地址[通俗易懂]

    国内外常用公共NTP网络时间同步服务器地址[通俗易懂]【腾讯云】热门云产品首单特惠秒杀,1核2G云服务器首年38元目录太长不看NTPPoolProjectNTP.ORG.CNNTP授时快速域名服务HSDN(HomeServerDataNetwork)本地服务器数据网络企业阿里巴巴腾讯微软苹果谷歌FacebookCloudflare高通HurricaneElectric飓风电气MSK-IX(MoscowInterneteXchange)莫斯科网络交换INTERNET…

    2022年6月15日
    82
  • Android开发入门案例「建议收藏」

    Android开发入门案例「建议收藏」初次接触安卓,做出来一个还能看的案例,类似小说阅读的APP,将源码记录一下一、案例效果1.登录界面2.注册界面3.用户信息显示界面4.小说阅读界面二、安卓代码1.AndroidManifest.xml<?xmlversion=”1.0″encoding=”utf-8″?><manifestxmlns:android=”http://schemas….

    2022年6月15日
    28
  • 图解Java 垃圾回收机制

    图解Java 垃圾回收机制Java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决了两个问题:给对象分配内存以及回收分配给对象的内存。垃圾回收机制的引入有效地解决了内存的回收问题使得他们在编写程序的时候不再需要考虑内存管理。本文首先着重介绍了判断一个对象是否可以被回收的两种经典算法,并详述了四种典型的垃圾回收算法的基本思想及其直接应用——垃圾收集器,最后结合内存回收策略介绍了内存分配规则。

    2022年6月11日
    33
  • 吐血总结:解决 Reboot and select proper boot device or ……以及其它蓝屏黑屏「建议收藏」

    吐血总结:解决 Reboot and select proper boot device or ……以及其它蓝屏黑屏「建议收藏」程序猿一枚,笔记本用了两年了,被我鼓捣的死去活来,难免会跟我闹些“小别扭”,借助各种黑屏蓝屏对我“发脾气”~开始还好(一年前),一些小错误还都镇的住,免去了重装系统带来的麻烦。近来不知怎地,各种傲娇,疯狂蓝屏、自动重启外加重启后黑屏,最让我头疼的就是Rebootandselectproperbootdeviceor。。。这个错误,以前都还好,出现这个错误之后进入BIOS面板来回调…

    2022年4月30日
    242
  • ws 无法热替换的问题

    ws 无法热替换的问题

    2022年2月23日
    39

发表回复

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

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