PHP 8.4.1 Released!

ReflectionProperty::__construct

(PHP 5, PHP 7, PHP 8)

ReflectionProperty::__constructСоздаёт объект класса ReflectionProperty

Описание

public ReflectionProperty::__construct(object|string $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()), true)
);

// Содаём экземпляр класса 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)

Смотрите также

Добавить

Примечания пользователей 1 note

up
4
geoffsmiths at hotmail dot com
7 years ago
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)
To Top