The ReflectionProperty class

(PHP 5, PHP 7)

Introducere

The ReflectionProperty class reports information about class properties.

Sinopsisul clasei

ReflectionProperty implements Reflector {
/* Constante */
const int IS_STATIC = 1 ;
const int IS_PUBLIC = 256 ;
const int IS_PROTECTED = 512 ;
const int IS_PRIVATE = 1024 ;
/* Proprietăți */
public $name ;
public $class ;
/* Metode */
final private __clone ( ) : void
public __construct ( mixed $class , string $name )
public static export ( mixed $class , string $name , bool $return = ? ) : string
public getDefaultValue ( ) : mixed
public getDocComment ( ) : string
public getModifiers ( ) : int
public getName ( ) : string
public getType ( ) : ReflectionType|null
public getValue ( object $object = ? ) : mixed
public hasDefaultValue ( ) : bool
public hasType ( ) : bool
public isDefault ( ) : bool
public isInitialized ( object $object = ? ) : bool
public isPrivate ( ) : bool
public isProtected ( ) : bool
public isPublic ( ) : bool
public isStatic ( ) : bool
public setAccessible ( bool $accessible ) : void
public setValue ( object $object , mixed $value ) : void
public __toString ( ) : string
}

Proprietăți

name

Name of the property. Read-only, throws ReflectionException in attempt to write.

class

Name of the class where the property is defined. Read-only, throws ReflectionException in attempt to write.

Constante predefinite

ReflectionProperty Modifiers

ReflectionProperty::IS_STATIC

Indicates static properties.

ReflectionProperty::IS_PUBLIC

Indicates public properties.

ReflectionProperty::IS_PROTECTED

Indicates protected properties.

ReflectionProperty::IS_PRIVATE

Indicates private properties.

Cuprins

add a note add a note

User Contributed Notes 2 notes

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

class Student {

    private
$members = array();
    protected
$name;
    public static
$noOfStudent;

    public function
__construct($name = 'Nanhe Kumar') {
       
$this->name = $name;
       
Student::$noOfStudent++;
    }

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

    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() {
        return
self::$noOfStudent;
    }

}

$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