ReflectionProperty::__construct

(PHP 5, PHP 7, PHP 8)

ReflectionProperty::__construct β€” Π‘ΠΎΠ·Π΄Π°Ρ‘Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса ReflectionProperty

ОписаниС

public function ReflectionProperty::__construct(object|string $class, string $property)

Бписок ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

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)

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅

οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ 1 note

up
6
geoffsmiths at hotmail dot com ΒΆ
8 years ago
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)