ReflectionClass 类

(PHP 5, PHP 7, PHP 8)

简介

ReflectionClass 类报告关于类的信息。

类概要

class ReflectionClass implements Reflector {
/* 常量 */
public const int IS_IMPLICIT_ABSTRACT;
public const int IS_FINAL;
public const int IS_READONLY;
/* 属性 */
public string $name;
/* 方法 */
public __construct(object|string $objectOrClass)
public static export(mixed $argument, bool $return = false): string
public getAttributes(?string $name = null, int $flags = 0): array
public getConstant(string $name): mixed
public getConstants(?int $filter = null): array
public getEndLine(): int|false
public getMethods(?int $filter = null): array
public getModifiers(): int
public getName(): string
public getProperties(?int $filter = null): array
public getStaticPropertyValue(string $name, mixed &$def_value = ?): mixed
public getTraits(): array
public hasConstant(string $name): bool
public hasMethod(string $name): bool
public hasProperty(string $name): bool
public inNamespace(): bool
public isAbstract(): bool
public isAnonymous(): bool
public isCloneable(): bool
public isEnum(): bool
public isFinal(): bool
public isInstance(object $object): bool
public isInterface(): bool
public isInternal(): bool
public isIterable(): bool
public isReadOnly(): bool
public isTrait(): bool
public newInstance(mixed ...$args): object
public newInstanceArgs(array $args = []): ?object
public setStaticPropertyValue(string $name, mixed $value): void
public __toString(): string
}

属性

name

类的名称。只读,尝试写入时会抛出 ReflectionException

预定义常量

ReflectionClass 修饰符

ReflectionClass::IS_IMPLICIT_ABSTRACT

表示类是 抽象 的,因为它包含一些抽象方法。

ReflectionClass::IS_EXPLICIT_ABSTRACT

表示类是 抽象 的,因为其定义。

ReflectionClass::IS_FINAL

表示类是 最终 的。

ReflectionClass::IS_READONLY

表示类是 只读 的。

变更日志

版本 描述
8.0.0 ReflectionClass::export() 已被移除。

目录

添加笔记

用户贡献笔记 5 笔记

danbettles at yahoo dot co dot uk
15 年前
要反映 PHP 5.3 中的命名空间类,您必须始终指定类的完全限定名称 - 即使您使用“use”语句对包含的命名空间进行了别名。

所以,而不是

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

您将输入

<?php
use App\Core as Core;
$oReflectionClass = new ReflectionClass('App\Core\Singleton');
?>
匿名
11 年前
反映别名将为您提供已解析类的反射。

<?php

class X {

}

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

?>
匿名
12 年前
反序列化的反射类会导致错误。

<?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
?>
featherbits
3 年前
为了获得类属性,请查看这里 (php8)
https://php.net/manual/en/language.attributes.reflection.php
YoungOfCthulhu
8 年前
也可以在类内部进行反射,并获取方法实例。

<?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);
}
}

从另一个 php 文件调用你将得到正确的结果:
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"
}
}
To Top