PHP Conference Japan 2024

ReflectionProperty 类

(PHP 5, PHP 7, PHP 8)

简介

ReflectionProperty 类报告有关类属性的信息。

类概要

class ReflectionProperty implements Reflector {
/* 常量 */
public const int IS_STATIC;
public const int IS_READONLY;
public const int IS_PUBLIC;
public const int IS_PROTECTED;
public const int IS_PRIVATE;
public const int IS_ABSTRACT;
public const int IS_PROTECTED_SET;
public const int IS_PRIVATE_SET;
public const int IS_VIRTUAL;
public const int IS_FINAL;
/* 属性 */
public string $name;
public string $class;
/* 方法 */
public __construct(object|string $class, string $property)
private __clone(): void
public static export(mixed $class, string $name, bool $return = ?): string
public getAttributes(?string $name = null, int $flags = 0): array
public getModifiers(): int
public getName(): string
public getValue(?object $object = null): mixed
public hasType(): bool
public isDefault(): bool
public isInitialized(?object $object = null): bool
public isLazy(object $object): bool
public isPrivate(): bool
public isPromoted(): bool
public isProtected(): bool
public isPublic(): bool
public isReadOnly(): bool
public isStatic(): bool
public setAccessible(bool $accessible): void
public setValue(object $object, mixed $value): void
public __toString(): string
}

属性

name

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

class

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

预定义常量

ReflectionProperty 修饰符

ReflectionProperty::IS_STATIC int

指示 静态 属性。在 PHP 7.4.0 之前,其值为 1

ReflectionProperty::IS_READONLY int

指示 只读 属性。自 PHP 8.1.0 起可用。

ReflectionProperty::IS_PUBLIC int

指示 公有 属性。在 PHP 7.4.0 之前,其值为 256

ReflectionProperty::IS_PROTECTED int

指示 受保护 属性。在 PHP 7.4.0 之前,其值为 512

ReflectionProperty::IS_PRIVATE int

指示 私有 属性。在 PHP 7.4.0 之前,其值为 1024

ReflectionProperty::IS_ABSTRACT int
指示属性为 抽象。自 PHP 8.4.0 起可用。
ReflectionProperty::IS_PROTECTED_SET int
自 PHP 8.4.0 起可用。
ReflectionProperty::IS_PRIVATE_SET int
自 PHP 8.4.0 起可用。
ReflectionProperty::IS_VIRTUAL int
自 PHP 8.4.0 起可用。
ReflectionProperty::IS_FINAL int
指示属性为 final。自 PHP 8.4.0 起可用。

注意:

这些常量的值可能会在 PHP 版本之间发生变化。建议始终使用常量,而不是直接依赖其值。

目录

添加注释

用户贡献的注释 1 条注释

9
rasmus at mindplay dot dk
14 年前
我认为更准确的解释是这样的

Reflection 类旨在反映应用程序的源代码,而不是任何运行时信息。

我认为您误解了上面示例中的 ReflectionProperty 构造函数。它接受对象作为参数只是一个便利功能 - 您实际上是在检查该对象的类,而不是对象本身,因此它基本上等同于

<?php

// 工作正常
$Reflection = new ReflectionProperty(get_class($a), 'a');

// 抛出异常
$Reflection = new ReflectionProperty(get_class($a), 'foo');

?>

获取您传入的对象的类是隐含的,因为检查定义的属性是此类的目的。

在您的示例中,$a->foo 是一个动态成员 - 它没有定义为类的成员,因此没有定义类引用、行号、默认值等 - 这意味着,没有可以反映的内容。

显然这个非常有用的库需要一些真正的文档......
To Top