Класс ReflectionProperty

(PHP 5, PHP 7)


Класс ReflectionProperty сообщает информацию о свойствах класса.

Обзор классов

ReflectionProperty implements Reflector {
/* Константы */
const integer IS_STATIC = 1 ;
const integer IS_PUBLIC = 256 ;
const integer IS_PROTECTED = 512 ;
const integer IS_PRIVATE = 1024 ;
/* Свойства */
public $name ;
public $class ;
/* Методы */
final private void __clone ( void )
public __construct ( mixed $class , string $name )
public static string export ( mixed $class , string $name [, bool $return ] )
public ReflectionClass getDeclaringClass ( void )
public string getDocComment ( void )
public int getModifiers ( void )
public string getName ( void )
public mixed getValue ([ object $object ] )
public bool isDefault ( void )
public bool isPrivate ( void )
public bool isProtected ( void )
public bool isPublic ( void )
public bool isStatic ( void )
public void setAccessible ( bool $accessible )
public void setValue ( object $object , mixed $value )
public string __toString ( void )



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


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

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

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


Указывает, что свойство является статическим.


Указывает, что свойство является общедоступным properties.


Указывает, что свойство является защищенным.


Указывает, что свойство является закрытым.


add a note add a note

User Contributed Notes 3 notes

rasmus at mindplay dot dk
8 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...
james at digitaledgeit dot com dot au
8 years ago
Please ignore my previous note. I didn't fully understand what the previous notes were referring to as "runtime". I now see they were referring to a slightly different question.

Nanhe Kumar
4 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