©
本文档使用
php.cn手册 发布
(PHP 5)
ReflectionClass 类报告了一个类的有关信息。
$argument
)$argument
[, bool $return
= false
] )$name
)$name
)$filter
] )$filter
] )$name
)$name
[, mixed &$def_value
] )$name
)$name
)$name
)$interface
)$object
)$class
)$args
[, mixed $...
] )$args
] )$name
, string $value
)类的名称。只读,并在尝试赋值的时候会抛出 ReflectionException。
ReflectionClass::IS_IMPLICIT_ABSTRACT
指示了类是一个抽象类(abstract), 因为它有抽象(abstract)方法。
ReflectionClass::IS_EXPLICIT_ABSTRACT
指示了类是一个抽象类(abstract), 因为它已明确定义。
ReflectionClass::IS_FINAL
指示这是一个 final 类。
[#1] YoungOfCthulhu [2015-09-21 14:20:56]
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"
}
}
[#2] Anonymous [2013-05-17 06:45:25]
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
?>
[#3] Anonymous [2011-11-11 09:58:16]
Unserialized reflection class cause error.
<?php
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
?>
[#4] danbettles at yahoo dot co dot uk [2009-03-29 02:48:19]
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');
?>