PHP 8.4.2 Released!

ReflectionProperty::getValue

(PHP 5, PHP 7, PHP 8)

ReflectionProperty::getValueПолучает значение

Описание

public ReflectionProperty::getValue(?object $object = null): mixed

Получает значение свойства.

Список параметров

object

Если свойство не статическое, необходимо передать объект, из которого требуется это свойство получить. Если вам нужно получить свойство по умолчанию, не предоставляя объект, используйте функцию ReflectionClass::getDefaultProperties().

Возвращаемые значения

Текущее значение свойства.

Список изменений

Версия Описание
8.1.0 Доступ к закрытым и защищённым свойствам можно сразу же получить с помощью метода ReflectionProperty::getValue(). Ранее их нужно было сделать доступными с помощью метода ReflectionProperty::setAccessible(); в противном случае выбрасывалось исключение ReflectionException.
8.0.0 object теперь допускает значение null.

Примеры

Пример #1 Пример использования ReflectionProperty::getValue()

<?php
class Foo {
public static
$staticProperty = 'foobar';

public
$property = 'barfoo';
protected
$privateProperty = 'foofoo';
}

$reflectionClass = new ReflectionClass('Foo');

var_dump($reflectionClass->getProperty('staticProperty')->getValue());
var_dump($reflectionClass->getProperty('property')->getValue(new Foo));

$reflectionProperty = $reflectionClass->getProperty('privateProperty');
$reflectionProperty->setAccessible(true); // требуется только до PHP 8.1.0
var_dump($reflectionProperty->getValue(new Foo));
?>

Результат выполнения приведённого примера:

string(6) "foobar"
string(6) "barfoo"
string(6) "foofoo"

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

Добавить

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

up
9
sergiy dot sokolenko at gmail dot com
14 years ago
To allow protected and private properties to be accessed, you should use
ReflectionProperty::setAccessible(bool $accessible):

<?php
/** Class Foo with protected and private members */
class Foo {
protected
$bar = 'barrr!';
private
$baz = 'bazzz!';
}

$reflFoo = new ReflectionClass('Foo');
$reflBar = $reflFoo->getProperty('bar');
$reflBaz = $reflFoo->getProperty('baz');

// Set private and protected members accessible for getValue/setValue
$reflBar->setAccessible(true);
$reflBaz->setAccessible(true);

$foo = new Foo();
echo
$reflBar->getValue($foo); // will output "barrr!"
echo $reflBaz->getValue($foo); // will output "bazzz!"

// You can also setValue
$reflBar->setValue($foo, "new value");
echo
$reflBar->getValue($foo); // will output "new value"
?>
To Top