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



Имя свойства. Доступно только для чтения и выбрасывает исключение ReflectionException при попытке записи.


Имя класса, в котором данное свойство описано. Доступно только для чтения и выбрасывает исключение ReflectionException при попытке записи.

Предопределённые константы

Модификаторы ReflectionProperty


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


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


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


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


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


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

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

Версия Описание
8.0.0 Метод ReflectionProperty::export() был удалён.


add a note

User Contributed Notes 2 notes

rasmus at mindplay dot dk
13 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:


// 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...
Nanhe Kumar
10 years ago
//serialize static properties (class variable)

class Student {

$members = array();
public static

public function
__construct($name = 'Nanhe Kumar') {
$this->name = $name;

public function
__sleep() {
$vars = get_class_vars(get_class($this));
foreach (
$vars as $key => $val) {
if (!empty(
$this->members[$key] = $val;

public function
__wakeup() {
foreach (
$this->members as $key => $val) {
$prop = new ReflectionProperty(get_class($this), $key);
$prop->setValue(get_class($this), $val);
$this->members = array();

public function
getTotalStudent() {


$so1 = new Student();
$so2 = new Student();
$serialized = serialize($so1);
print_r($serialized); //O:7:"Student":2:{s:16:"Studentmembers";a:1:{s:11:"noOfStudent";i:2;}s:7:"*name";s:11:"Nanhe Kumar";}
$unserialized = unserialize($serialized);
print_r($unserialized); //Student Object ( [members:Student:private] => Array ( ) [name:protected] => Nanhe Kumar )
echo Student::$noOfStudent; //2
To Top