At example #2: the comment // int(2) is stated while the value for the private property is actually 3. (private $z = 3;)
var_dump($prop->getValue($obj)); // This should be int(3)
(PHP 5, PHP 7, PHP 8)
ReflectionProperty::__construct — Конструктор класса ReflectionProperty
$class
, string $property
)
К настоящему времени эта функция ещё не была документирована; для ознакомления доступен только список аргументов.
class
Либо строка, содержащая имя отражаемого класса, либо объект.
property
Имя свойства, которое требуется отобразить.
Эта функция не возвращает значения после выполнения.
Попытка получить или задать значение защищённого или закрытого свойства приведёт к выбрасыванию исключения.
Пример #1 Пример использования ReflectionProperty::__construct()
<?php
class Str
{
public $length = 5;
}
// Создание нового объекта класса ReflectionProperty
$prop = new ReflectionProperty('Str', 'length');
// Вывод основной информации об объекте
printf(
"===> %s%s%s%s свойство '%s' (которое %s)\n" .
" имеющее модификаторы %s\n",
$prop->isPublic() ? ' общедоступное' : '',
$prop->isPrivate() ? ' закрытое' : '',
$prop->isProtected() ? ' защищённое' : '',
$prop->isStatic() ? ' статическое' : '',
$prop->getName(),
$prop->isDefault() ? 'объявлено во время компиляции' : 'создано во время выполнения',
var_export(Reflection::getModifierNames($prop->getModifiers()), 1)
);
// создание экземпляра класса Str
$obj= new Str();
// получение текущего значения
printf("---> Значение: ");
var_dump($prop->getValue($obj));
// Изменение значения
$prop->setValue($obj, 10);
printf("---> Установка значения 10, новое значение: ");
var_dump($prop->getValue($obj));
// Сбросить объект
var_dump($obj);
?>
Результатом выполнения данного примера будет что-то подобное:
===> общедоступное свойство 'length' (которое объявлено во время компиляции) имеющее модификаторы array ( 0 => 'public', ) ---> Значение: int(5) ---> Установка значения 10, новое значение: int(10) object(Str)#2 (1) { ["length"]=> int(10) }
Пример #2 Получение значений защищённых и закрытых свойств, используя класс ReflectionProperty
<?php
class Foo {
public $x = 1;
protected $y = 2;
private $z = 3;
}
$obj = new Foo;
$prop = new ReflectionProperty('Foo', 'y');
$prop->setAccessible(true);
var_dump($prop->getValue($obj)); // int(2)
$prop = new ReflectionProperty('Foo', 'z');
$prop->setAccessible(true);
var_dump($prop->getValue($obj)); // int(2)
?>
Результатом выполнения данного примера будет что-то подобное:
int(2) int(3)
At example #2: the comment // int(2) is stated while the value for the private property is actually 3. (private $z = 3;)
var_dump($prop->getValue($obj)); // This should be int(3)