@XXX-prog

Как изменить приватное свойство в PHP?

Сегодня на собеседовании задали вопрос. Как изменить приватное свойство в Классе PHP снаружи?
Кто-нибудь знает ответ? :)
(Сеттера нет)
  • Вопрос задан
  • 354 просмотра
Решения вопроса 3
VladimirAndreev
@VladimirAndreev
php web dev
<?php

class AAA {

  private $a = '777';

  function __toString() {

    return \sprintf("%s\n", $this->a);
  }
}


$a = new AAA;

echo $a;

$b = new ReflectionClass(AAA::class);

$property = $b->getProperty('a');
$property->setAccessible(true);
$property->setValue($a, 999);

echo $a;


as@avs:~$ php7.1 /tmp/testReflection.php 
777
999
Ответ написан
kruslan
@kruslan
2 способа:

class A {
	private $val = 'ok';
}

$a = new A();
$closure = function(){echo $this->val;};
$binding = $closure->bindTo($a, 'A');
$binding();

$b = (array) $a;
echo $b["\0*\0val"];


Но вообще - беги от компании, которая спрашивает подобное!
Ответ написан
DevMan
@DevMan Куратор тега PHP
через рефлексию. https://ideone.com/NPRXD7
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы