phpday 2025 - Call For Papers

Класс 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

Указывает, что свойство является статическим. До PHP 7.4.0, значение было 1.

ReflectionProperty::IS_READONLY

Указывает, что свойство является доступным только для чтения. Доступно, начиная с PHP 8.1.0.

ReflectionProperty::IS_PUBLIC

Указывает, что свойство является общедоступным. До PHP 7.4.0, значение было 256.

ReflectionProperty::IS_PROTECTED

Указывает, что свойство является защищённым. До PHP 7.4.0, значение было 512.

ReflectionProperty::IS_PRIVATE

Указывает, что свойство является закрытым. До PHP 7.4.0, значение было 1024.

ReflectionProperty::IS_ABSTRACT
Указывает, что свойство является абстрактным. Константа доступна с PHP 8.4.0.
ReflectionProperty::IS_PROTECTED_SET
Константа доступна с PHP 8.4.0.
ReflectionProperty::IS_PRIVATE_SET
Константа доступна с PHP 8.4.0.
ReflectionProperty::IS_VIRTUAL
Константа доступна с PHP 8.4.0.
ReflectionProperty::IS_FINAL
Указывает, что свойство является окончательным. Константа доступна с PHP 8.4.0.

Замечание:

Значения этих констант могут изменяться от версии к версии PHP. Рекомендуется всегда использовать константы и не полагаться напрямую на значения.

Список изменений

Версия Описание
8.4.0 Добавлены константы ReflectionProperty::IS_VIRTUAL, ReflectionProperty::IS_PRIVATE_SET, ReflectionProperty::IS_PROTECTED_SET, ReflectionProperty::IS_ABSTRACT и ReflectionProperty::IS_FINAL.
8.0.0 Метод ReflectionProperty::export() был удалён.

Содержание

Добавить

Примечания пользователей 1 note

up
9
rasmus at mindplay dot dk
14 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