Класс ReflectionProperty
(PHP 5, PHP 7)
Введение
Класс ReflectionProperty сообщает информацию о свойствах класса.
Обзор классов
Свойства
- name
-
Имя свойства. Доступно только для чтения и выбрасывает исключение ReflectionException при попытке записи.
- class
-
Имя класса, в котором данное свойство описано. Доступно только для чтения и выбрасывает исключение ReflectionException при попытке записи.
Предопределенные константы
Модификаторы ReflectionProperty
ReflectionProperty::IS_STATIC
-
Указывает, что свойство является статическим (static).
ReflectionProperty::IS_PUBLIC
-
Указывает, что свойство является общедоступным (public) properties.
ReflectionProperty::IS_PROTECTED
-
Указывает, что свойство является защищенным (protected).
ReflectionProperty::IS_PRIVATE
-
Указывает, что свойство является закрытым (private).
Содержание
- ReflectionProperty::__clone — Копирующий конструктор
- ReflectionProperty::__construct — Конструктор класса ReflectionProperty
- ReflectionProperty::export — Экспорт
- ReflectionProperty::getDeclaringClass — Получение объявляющего класса
- ReflectionProperty::getDocComment — Получение документируемого комментария
- ReflectionProperty::getModifiers — Получение модификаторов
- ReflectionProperty::getName — Получение имени свойства
- ReflectionProperty::getValue — Получение значения
- ReflectionProperty::isDefault — Проверяет, является ли значение свойством по умолчанию
- ReflectionProperty::isPrivate — Проверяет, является ли свойство частным (private)
- ReflectionProperty::isProtected — Проверяет, является ли свойство защищенным (protected)
- ReflectionProperty::isPublic — Проверяет, является ли свойство общедоступным (public)
- ReflectionProperty::isStatic — Проверка, является ли свойство статическим
- ReflectionProperty::setAccessible — Задание доступности свойства
- ReflectionProperty::setValue — Задание значения свойству
- ReflectionProperty::__toString — Преобразование в строку
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения, относящиеся к переменным и типам
- Введение
- Установка и настройка
- Предопределенные константы
- Примеры
- Расширение
- Класс Reflection
- Класс ReflectionClass
- Класс ReflectionZendExtension
- Класс ReflectionExtension
- Класс ReflectionFunction
- Класс ReflectionFunctionAbstract
- Класс ReflectionMethod
- Класс ReflectionObject
- Класс ReflectionParameter
- Класс ReflectionProperty
- ReflectionType
- ReflectionGenerator
- Интерфейс Reflector
- Класс ReflectionException
Коментарии
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...
<?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
?>