ReflectionProperty 类
(PHP 5, PHP 7, PHP 8)
简介
ReflectionProperty 类报告了类的属性的相关信息。
类摘要
属性
- name
-
属性的名称。只读,在尝试赋值的时候抛出 ReflectionException。
- class
-
定义的属性所在的类。只读,在尝试赋值的时候抛出 ReflectionException。
目录
- ReflectionProperty::__clone — Clone
- ReflectionProperty::__construct — Construct a ReflectionProperty object
- ReflectionProperty::export — Export
- ReflectionProperty::getAttributes — Gets Attributes
- ReflectionProperty::getDeclaringClass — Gets declaring class
- ReflectionProperty::getDefaultValue — Returns the default value declared for a property
- ReflectionProperty::getDocComment — Gets the property doc comment
- ReflectionProperty::getModifiers — Gets the property modifiers
- ReflectionProperty::getName — Gets property name
- ReflectionProperty::getType — Gets a property's type
- ReflectionProperty::getValue — Gets value
- ReflectionProperty::hasDefaultValue — Checks if property has a default value declared
- ReflectionProperty::hasType — Checks if property has a type
- ReflectionProperty::isDefault — Checks if property is a default property
- ReflectionProperty::isInitialized — Checks whether a property is initialized
- ReflectionProperty::isPrivate — Checks if property is private
- ReflectionProperty::isPromoted — Checks if property is promoted
- ReflectionProperty::isProtected — Checks if property is protected
- ReflectionProperty::isPublic — Checks if property is public
- ReflectionProperty::isReadOnly — 检查属性是否为只读
- ReflectionProperty::isStatic — Checks if property is static
- ReflectionProperty::setAccessible — Set property accessibility
- ReflectionProperty::setValue — Set property value
- ReflectionProperty::__toString — To string

User Contributed Notes 2 notes
rasmus at mindplay dot dk ¶
11 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...
Nanhe Kumar ¶
8 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
?>
备份地址:http://www.lvesu.com/blog/php/class.reflectionproperty.php