PHP 8.5.0 Alpha 2 available for testing

ReflectionClass::setStaticPropertyValue

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

ReflectionClass::setStaticPropertyValueDefine el valor de una propiedad estática pública

Descripción

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

Define el valor de una propiedad estática pública. Si la propiedad es privada o protegida, el método fallará.

ReflectionProperty::setValue() permite definir el valor de las propiedades públicas, privadas y protegidas.

Parámetros

name

El nombre de la propiedad.

value

El nuevo valor para la propiedad.

Valores devueltos

No se retorna ningún valor.

Historial de cambios

Versión Descripción
7.4.0 El uso de ReflectionClass::setStaticPropertyValue() para definir una propiedad privada o protegida ahora produce un error fatal. Anteriormente, esto lanzaba una ReflectionException.

Ver también

add a note

User Contributed Notes 2 notes

up
25
Andrew Jackson
11 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
13 years ago
It is important to note that calling ReflectionClass::setStaticPropertyValue will not allow you to add new static properties to a class.
To Top