(PHP 8 >= 8.4.0)
ReflectionProperty::setRawValue — Устанавливает значение свойству в обход хука set, если такой хук определили
Метод устанавливает значение свойству в обход хука set
, если хук записи определили.
object
value
Функция не возвращает значения после выполнения.
При попытке установить значение виртуальному свойству метод выбросит ошибку Error, поскольку движок PHP не предусматривает хранилище для значений виртуальных свойств.
Пример #1 Пример установки исходного значения свойству методом ReflectionProperty::setRawValue()
<?php
class Example
{
public int $age {
set {
if ($value <= 0) {
throw new \InvalidArgumentException();
}
$this->age = $value;
}
}
}
$example = new Example();
$rClass = new \ReflectionClass(Example::class);
$rProp = $rClass->getProperty('age');
// Следующие попытки установить значение свойству пройдут через хук set и выбросят исключение
try {
$example->age = -2;
} catch (InvalidArgumentException) {
echo "При установке свойству значения -2 хук выбросил исключение InvalidArgumentException\n";
}
try {
$rProp->setValue($example, -2);
} catch (InvalidArgumentException) {
echo "При установке значения -2 методом ReflectionProperty::setValue() хук выбросил исключение InvalidArgumentException\n";
}
// Но такой вызов установит свойству $age значение -2 без ошибки
$rProp->setRawValue($example, -2);
echo $example->age;
?>
Результат выполнения приведённого примера:
При установке свойству значения -2 хук выбросил исключение InvalidArgumentException При установке значения -2 методом ReflectionProperty::setValue() хук выбросил исключение InvalidArgumentException -2