ReflectionClass 类

(PHP 5, PHP 7)

简介

ReflectionClass 类报告了一个类的有关信息。

类摘要

ReflectionClass implements Reflector {
/* 常量 */
const integer IS_IMPLICIT_ABSTRACT = 16 ;
const integer IS_EXPLICIT_ABSTRACT = 32 ;
const integer IS_FINAL = 64 ;
/* 属性 */
public $name ;
/* 方法 */
public __construct ( mixed $argument )
public static export ( mixed $argument [, bool $return = false ] ) : string
public getConstant ( string $name ) : mixed
public getConstants ( void ) : array
public getConstructor ( void ) : ReflectionMethod
public getDefaultProperties ( void ) : array
public getDocComment ( void ) : string
public getEndLine ( void ) : int
public getExtensionName ( void ) : string
public getFileName ( void ) : string
public getInterfaceNames ( void ) : array
public getInterfaces ( void ) : array
public getMethod ( string $name ) : ReflectionMethod
public getMethods ([ int $filter ] ) : array
public getModifiers ( void ) : int
public getName ( void ) : string
public getNamespaceName ( void ) : string
public getParentClass ( void ) : ReflectionClass
public getProperties ([ int $filter ] ) : array
public getProperty ( string $name ) : ReflectionProperty
public getReflectionConstants ( void ) : array
public getShortName ( void ) : string
public getStartLine ( void ) : int
public getStaticProperties ( void ) : array
public getStaticPropertyValue ( string $name [, mixed &$def_value ] ) : mixed
public getTraitAliases ( void ) : array
public getTraitNames ( void ) : array
public getTraits ( void ) : array
public hasConstant ( string $name ) : bool
public hasMethod ( string $name ) : bool
public hasProperty ( string $name ) : bool
public implementsInterface ( string $interface ) : bool
public inNamespace ( void ) : bool
public isAbstract ( void ) : bool
public isAnonymous ( void ) : bool
public isCloneable ( void ) : bool
public isFinal ( void ) : bool
public isInstance ( object $object ) : bool
public isInstantiable ( void ) : bool
public isInterface ( void ) : bool
public isInternal ( void ) : bool
public isIterable ( void ) : bool
public isIterateable ( void ) : bool
public isSubclassOf ( string $class ) : bool
public isTrait ( void ) : bool
public isUserDefined ( void ) : bool
public newInstance ( mixed $args [, mixed $... ] ) : object
public newInstanceArgs ([ array $args ] ) : object
public newInstanceWithoutConstructor ( void ) : object
public setStaticPropertyValue ( string $name , string $value ) : void
public __toString ( void ) : string
}

属性

name

类的名称。只读,并在尝试赋值的时候会抛出 ReflectionException

预定义常量

ReflectionClass 修饰符

ReflectionClass::IS_IMPLICIT_ABSTRACT

指示了类是一个抽象类(abstract), 因为它有抽象(abstract)方法。

ReflectionClass::IS_EXPLICIT_ABSTRACT

指示了类是一个抽象类(abstract), 因为它已明确定义。

ReflectionClass::IS_FINAL

指示这是一个 final 类。

Table of Contents

User Contributed Notes

YoungOfCthulhu 21-Sep-2015 02:20
It is also possible to do reflection from within the class and get the methods for instance.

<?php

class test
{
    private
$test = "";

    public function
setTest($test)
    {
       
$this->test = $test;
        return
$this;
    }

    public function
getTest()
    {
        return
$this->test;
    }
   
    public function
run(){
       
$class = new ReflectionClass('test');
       
$methods = $class->getMethods();
       
var_dump($methods);
    }
}

Called from another php file you get the proper result:
array(
3) {
  [
0]=>
  &
object(ReflectionMethod)#3 (2) {
   
["name"]=>
   
string(8) "setTest"
   
["class"]=>
   
string(4) "test"
 
}
  [
1]=>
  &
object(ReflectionMethod)#4 (2) {
   
["name"]=>
   
string(8) "getTest"
   
["class"]=>
   
string(4) "test"
 
}
  [
2]=>
  &
object(ReflectionMethod)#5 (2) {
   
["name"]=>
   
string(3) "run"
   
["class"]=>
   
string(4) "test"
 
}
}
Anonymous 17-May-2013 06:45
Reflecting an alias will give you a reflection of the resolved class.

<?php

class X {
   
}

class_alias('X','Y');
class_alias('Y','Z');
$z = new ReflectionClass('Z');
echo
$z->getName(); // X

?>
Anonymous 11-Nov-2011 09:58
Unserialized reflection class cause error.

<?php
/**
 * abc
 */
class a{}

$ref = new ReflectionClass('a');
$ref = unserialize(serialize($ref));
var_dump($ref);
var_dump($ref->getDocComment());

// object(ReflectionClass)#2 (1) {
//   ["name"]=>
//   string(1) "a"
// }
// PHP Fatal error:  ReflectionClass::getDocComment(): Internal error: Failed to retrieve the reflection object
?>
danbettles at yahoo dot co dot uk 29-Mar-2009 02:48
To reflect on a namespaced class in PHP 5.3, you must always specify the fully qualified name of the class - even if you've aliased the containing namespace using a "use" statement.

So instead of:

<?php
use App\Core as Core;
$oReflectionClass = new ReflectionClass('Core\Singleton');
?>

You would type:

<?php
use App\Core as Core;
$oReflectionClass = new ReflectionClass('App\Core\Singleton');
?>