文字

ReflectionProperty 类

(PHP 5)

简介

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 )
}

属性

name

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

class

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

预定义常量

ReflectionProperty 修饰符

ReflectionProperty::IS_STATIC

指示了 static 的属性。

ReflectionProperty::IS_PUBLIC

指示了 public 的属性。

ReflectionProperty::IS_PROTECTED

指示了 protected 的属性。

ReflectionProperty::IS_PRIVATE

指示了 private 的属性。

Table of Contents

  • ReflectionProperty::__clone — Clone
  • ReflectionProperty::__construct — Construct a ReflectionProperty object
  • ReflectionProperty::export — Export
  • ReflectionProperty::getDeclaringClass — Gets declaring class
  • ReflectionProperty::getDocComment — Gets doc comment
  • ReflectionProperty::getModifiers — Gets modifiers
  • ReflectionProperty::getName — Gets property name
  • ReflectionProperty::getValue — Gets value
  • ReflectionProperty::isDefault — Checks if property is a default property
  • ReflectionProperty::isPrivate — Checks if property is private
  • ReflectionProperty::isProtected — Checks if property is protected
  • ReflectionProperty::isPublic — Checks if property is public
  • ReflectionProperty::isStatic — Checks if property is static
  • ReflectionProperty::setAccessible — Set property accessibility
  • ReflectionProperty::setValue — Set property value
  • ReflectionProperty::__toString — To string

用户评论:

[#1] Nanhe Kumar [2014-01-06 12:36:50]

<?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
?>

[#2] james at digitaledgeit dot com dot au [2010-08-29 20:30:01]

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.

Apologies!

[#3] rasmus at mindplay dot dk [2010-07-30 05:06:14]

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...

上一篇: 下一篇: