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 function __construct(object|string $class, string $property)
private function __clone(): void
public static function export(mixed $class, string $name, bool $return = ?): string
public function getAttributes(?string $name = null, int $flags = 0): array
public function getDefaultValue(): mixed
public function getDocComment(): string|false
public function getHooks(): array
public function getModifiers(): int
public function getName(): string
public function getRawValue(object $object): mixed
public function getSettableType(): ?ReflectionType
public function getType(): ?ReflectionType
public function getValue(?object $object = null): mixed
public function hasDefaultValue(): bool
public function hasHook(PropertyHookType $type): bool
public function hasHooks(): bool
public function hasType(): bool
public function isAbstract(): bool
public function isDefault(): bool
public function isDynamic(): bool
public function isFinal(): bool
public function isInitialized(?object $object = null): bool
public function isLazy(object $object): bool
public function isPrivate(): bool
public function isPrivateSet(): bool
public function isPromoted(): bool
public function isProtected(): bool
public function isProtectedSet(): bool
public function isPublic(): bool
public function isReadOnly(): bool
public function isStatic(): bool
public function isVirtual(): bool
#[\Deprecated]
public function setAccessible(bool $accessible): void
public function setRawValue(object $object, mixed $value): void
public function setRawValueWithoutLazyInitialization(object $object, mixed $value): void
public function setValue(?object $object, mixed $value): void
public function skipLazyInitialization(object $object): void
public function __toString(): string
}

属性

name

属性名。只读,在尝试赋值的时候抛出 ReflectionException

class

定义的属性所在的类。只读,在尝试赋值的时候抛出 ReflectionException

预定义常量

ReflectionProperty 修饰符

ReflectionProperty::IS_STATIC int

表示 static 属性。在 PHP 7.4.0 之前,值为 1

ReflectionProperty::IS_READONLY int

表示 readonly 属性。自 PHP 8.1.0 起可用。

ReflectionProperty::IS_PUBLIC int

表示 public 属性。在 PHP 7.4.0 之前,值为 256

ReflectionProperty::IS_PROTECTED int

表示 protected 属性。在 PHP 7.4.0 之前,值为 512

ReflectionProperty::IS_PRIVATE int

表示 private 属性。在 PHP 7.4.0 之前,值为 1024

ReflectionProperty::IS_ABSTRACT int
表示属性是 abstract。自 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 note

up
7
rasmus at mindplay dot dk
15 years ago
I think a more accurate explanation is this:

The Reflection classes are designed to reflect upon the source code of an application, not on any runtime information.

I think you misunderstand the ReflectionProperty constructor in your example above. The fact that it accepts an object as argument is just a convenience feature - you are actually inspecting the class of that object, not the object itself, so it's basically equivalent to:

<?php

// works fine 
$Reflection = new ReflectionProperty(get_class($a), 'a');

// throws exception 
$Reflection = new ReflectionProperty(get_class($a), 'foo');

?>

Getting the class of the object you're passing in is implied, since inspecting a defined property is the purpose of this class.

In your example, $a->foo is a dynamic member - it is not defined as a member of class, so there is no defining class reference, line number, default value, etc. - which means, there is nothing to reflect upon.

Clearly this very useful library could use some real documentation...
To Top