PHP 8.6.0 Beta 1 is available for testing

ReflectionClass::setStaticPropertyValue

(PHP 5 >= 5.1.2, PHP 7, PHP 8)

ReflectionClass::setStaticPropertyValueУстанавливает значение общедоступного статического свойства

Описание

public function ReflectionClass::setStaticPropertyValue(string $name, mixed $value): void

Устанавливает значение общедоступного статического свойства. Если свойство является закрытым или защищённым, метод завершится с ошибкой.

Метод ReflectionProperty::setValue() позволяет устанавливать значение общедоступных, закрытых и защищённых свойств.

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

name

Имя свойства.

value

Новое значение.

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

Функция не возвращает значения после выполнения.

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

Версия Описание
7.4.0 Использование метода ReflectionClass::setStaticPropertyValue() для установки частного или защищённого свойства теперь приводит к фатальной ошибке. Ранее выбрасывалось исключение ReflectionException .

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

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

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

up
25
Andrew Jackson
12 years ago
Calling this method on a static property that is not public will return a ReflectionException stating the property does not exist. This is quite misleading as the property is valid.
class test {
 public static $publicProperty = 'public';
 private static $privateProperty = 'private';
 public static function printProperties() {
 echo self::$publicProperty . "\n";
 echo self::$privateProperty . "\n";
 }
} 
$reflectedClass = new \ReflectionClass('test');
$reflectedClass->setStaticPropertyValue('publicProperty', 'foo');
$reflectedClass->setStaticPropertyValue( 'privateProperty', 'bar' );
PHP Fatal error: Uncaught exception 'ReflectionException' with message 'Class test does not have a property named privateProperty'
If you retrieve the method using the reflection class getProperty method you can circumnavigate this issue
$reflectedProperty = $reflectedClass->getProperty('privateProperty');
$reflectedProperty->setAccessible(true);
$reflectedProperty = $reflectedProperty->setValue('bar');
test::printProperties(); 
will echo
foo
bar
up
15
chuck at manchuck dot com
14 years ago
It is important to note that calling ReflectionClass::setStaticPropertyValue will not allow you to add new static properties to a class.
+Добавить

AltStyle によって変換されたページ (->オリジナル) /