php反射类 ReflectionClass使用例子

反射类是一个类的映射

  namespace News;
  class News{
      public $newsid; 
      public function index(){
           ……
      }
  }
正常我们实例化一个类是这样: $News = new News\News();
如果我们要实例化News类的反射类是这样:$News = new \ReflectionClass(‘News\News’);

那么通过反射类实例化的类和普通类有什么不同呢?

通过反射类实例化的类我们可以获取这个这个类的详细信息,可以对类进行分析

例如:$News->getProperties()可以获取这个类的所有属性与方法。

 array (size=1)
      0 => & object(ReflectionProperty)[2]
        public 'name' => string 'newsid' (length=6)
        public 'class' => string 'News' (length=4)
getShortName() getName() getNamespaceName() 分别可以获得类名,带命名空间的类名,和命名空间的名称 News News\News News

ReflectionClass的一个应用就是在父类中获取子类的名称,从而针对不同的子类做不同的处理:

    $reflection = new \ReflectionClass($this);
    $class_name = $reflection->getShortName();
    // check key
    if (!key_exists($class_name, $this->configs)) {
        return true;
    }
    // params
    $params = $this->configs[$class_name];

    return $this->_handle($params);
反射类的使用应该可以相当灵活,还有相当多的其他用途待发掘。

时间: 2024-10-06 13:29:36

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()

php反射类 ReflectionClass

  什么是php反射类,顾名思义,可以理解为一个类的映射. 举个例子: class fuc { //定义一个类 static function ec() { echo '我是一个类'; } } $class=new ReflectionClass('fuc'); //建立 fuc这个类的反射类 echo $class; //输出这反射类 Class [ class A ] { @@ F:phpwebmyPHPtest.php 23-30 - Constants [0] { } - Static

PHP反射类ReflectionClass和ReflectionObject的使用方法_php技巧

PHP中的扩展反射类,该扩展用来分析php程序,导出或提取出关于类.方法.属性.参数等的详细信息,包括注释.看一个这样的问题,php类的成员变量没有在类中声明,而是在函数中声明,有什么不同? 复制代码 代码如下: class test{    private $name;    private $sex;    function __construct(){        $this->aaa='aaa';    }} $test=new test(); $reflect=new Reflect

PHP的反射类ReflectionClass、ReflectionMethod使用实例_php实例

PHP5 具有完整的反射API,添加对类.接口.函数.方法和扩展进行反向工程的能力. 反射是什么? 它是指在PHP运行状态中,扩展分析PHP程序,导出或提取出关于类.方法.属性.参数等的详细信息,包括注释.这种动态获取的信息以及动态调用对象的方法的功能称为反射API.反射是操纵面向对象范型中元模型的API,其功能十分强大,可帮助我们构建复杂,可扩展的应用. 其用途如:自动加载插件,自动生成文档,甚至可用来扩充PHP语言. PHP反射api由若干类组成,可帮助我们用来访问程序的元数据或者同相关的注

反射类的main方法-关于反射类的方法参数问题

问题描述 关于反射类的方法参数问题 1. //public Class[] run(String strString[] i) @Test public void test3() throws Exception{ Person p=new Person(); Class clazz=Class.forName(""cn.itcast.reflect.Person""); Method method=clazz.getMethod(""run&q

java-MyEclipse中写反射类,new Class[] 总提示错误问什么

问题描述 MyEclipse中写反射类,new Class[] 总提示错误问什么 public Class[] fangfa(String name,int[] x){ Class[] cl = new Class[] (String.class); return cl; } 解决方案 你定义的是数组,不应该那么写,Class[] c = new Class[]{String.class};

一个CSS元素同时有多个类选择器的例子

一个元素可以同时有多个类选择器.注意,多个类选择器有冲突时,在Css文件里最后写的那个类选择器优先级最高. 在下面的例子中,<div>有cls1和cls2两个类选择器,注意其写法,需要在一个class标识符内按顺序用空格隔开写. 例: html文件: <html> <head> <title>一个元素同时有多个类选择器</title> <link rel="stylesheet" type="text/css&

CSS类选择器的例子

html文件的内容: <html> <head> <title>无标题文档</title> <link rel="stylesheet" type="text/css" href="selector.css" /> </head> <body> <span class="style1">新闻一</span> <sp

关于那个SMTP类及一个例子

因为显示的原因,发上来的帖里里有一些空格被删除了,造成大家使用上的一些错误.分析如下:1,因为不经意的修改,大家拿到这样的很优秀的类后,总希望改成自己看起来舒心一些.不过我需要提醒一些,在这个程序里,有时增加或者删除几个空格都会造成程序出错.2,现在我将发上来的程序的一些问题说说明一下.Content-Type:后面的1-2行前面要有数个空格.请加上.HTML中每一行前面的空格都不会显示,所以,帖子里没有了.这是前面一个朋友帖出的内容,我修改后如下:This is a multi-part me