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 β Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° ReflectionProperty
classΠ‘ΡΡΠΎΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ° Π΄Π»Ρ ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ.
propertyΠΠΌΡ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΡΡΠ°Π·ΠΈΡΡ.
ΠΠ΅ΡΠΎΠ΄ Π²ΡΠ±ΡΠΎΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π·Π°ΡΠΈΡΡΠ½Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π·Π°ΠΊΡΡΡΠΎΠ³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΊΠ»Π°ΡΡΠ°.
ΠΡΠΈΠΌΠ΅Ρ #1 ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° ReflectionProperty::__construct()
<?php
class Str
{
public $length = 5;
}
// Π‘ΠΎΠ·Π΄Π°ΡΠΌ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° ReflectionProperty
$prop = new ReflectionProperty('Str', 'length');
// ΠΡΠ²ΠΎΠ΄ΠΈΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΎΠ±ΡΠ΅ΠΊΡΠ΅
printf(
"===> Π£%s%s%s%s ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ '%s' (ΠΊΠΎΡΠΎΡΠΎΠ΅ %s)\n" .
" Π΅ΡΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ %s\n",
$prop->isPublic() ? ' ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ' : '',
$prop->isPrivate() ? ' Π·Π°ΠΊΡΡΡΠΎΠ³ΠΎ' : '',
$prop->isProtected() ? ' Π·Π°ΡΠΈΡΡΠ½Π½ΠΎΠ³ΠΎ' : '',
$prop->isStatic() ? ' ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ' : '',
$prop->getName(),
$prop->isDefault() ? 'ΠΎΠ±ΡΡΠ²ΠΈΠ»ΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ' : 'ΡΠΎΠ·Π΄Π°Π»ΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°',
var_export(Reflection::getModifierNames($prop->getModifiers()), true)
);
// Π‘ΠΎΠ΄Π°ΡΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Str
$obj= new Str();
// ΠΠΎΡΡΠ°Π΅ΠΌ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
printf("---> ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅: ");
var_dump($prop->getValue($obj));
// ΠΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
$prop->setValue($obj, 10);
printf("---> Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΡ 10, Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅: ");
var_dump($prop->getValue($obj));
// Π‘Π±ΡΠ°ΡΡΠ²Π°Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ
var_dump($obj);
?>ΠΡΠ²ΠΎΠ΄ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡ ΠΎΠΆ Π½Π°:
===> Π£ ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π° 'length' (ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΠ±ΡΡΠ²ΠΈΠ»ΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ)
Π΅ΡΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ array (
0 => 'public',
)
---> ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅: int(5)
---> Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΡ 10, Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅: int(10)
object(Str)#2 (1) {
["length"]=>
int(10)
}
ΠΡΠΈΠΌΠ΅Ρ #2 ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π·Π°ΡΠΈΡΡΠ½Π½ΡΡ ΠΈ Π·Π°ΠΊΡΡΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ² ΡΠ΅ΡΠ΅Π· ΠΊΠ»Π°ΡΡ 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)
?>ΠΡΠ²ΠΎΠ΄ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡ ΠΎΠΆ Π½Π°:
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)