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)(PHP 5, PHP 7, PHP 8)
ReflectionProperty::__construct — Constrói um objeto ReflectionProperty
classUma string contendo o nome da classe a ser refletida ou um objeto.
propertyO nome da propriedade que está sendo refletida.
Tentando obter ou definir valores de propriedades de classe privada ou protegida resultará no lançamento de uma exceção.
Exemplo #1 Exemplo de ReflectionProperty::__construct()
<?php
class Str
{
public $length = 5;
}
// Cria uma instância da classe ReflectionProperty
$prop = new ReflectionProperty('Str', 'length');
// Imprime informações básicas
printf(
"===> A propriedade%s%s%s%s '%s' (que foi %s)\n" .
" com os modificadores %s\n",
$prop->isPublic() ? ' pública' : '',
$prop->isPrivate() ? ' privada' : '',
$prop->isProtected() ? ' protegida' : '',
$prop->isStatic() ? ' estática' : '',
$prop->getName(),
$prop->isDefault() ? 'declarada no momento da compilação' : 'criada durante a execução',
var_export(Reflection::getModifierNames($prop->getModifiers()), true)
);
// Cria uma instância de Str
$obj= new Str();
// Obtém o valor atual
printf("---> O valor é: ");
var_dump($prop->getValue($obj));
// Altera o valor
$prop->setValue($obj, 10);
printf("---> Definindo o valor para 10, o novo valor é: ");
var_dump($prop->getValue($obj));
// Exibe o objeto
var_dump($obj);
?>O exemplo acima produzirá algo semelhante a:
===> A propriedade pública 'length' (que foi declarada no momento da compilação)
com os modificadores array (
0 => 'public',
)
---> O valor é: int(5)
---> Definindo o valor para 10, o novo valor é: int(10)
object(Str)#2 (1) {
["length"]=>
int(10)
}
Exemplo #2 Obtendo valor de propriedades privadas e protegidas usando a classe 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)
?>O exemplo acima produzirá algo semelhante a:
int(2) int(3)
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)