Как получить доступ к private свойству класса из другого класса (извне) ?
Согласно (1), есть один легальный и два нелегальных способа:
Решение №1: Наследование
измените их на защищенные переменные-члены и расширьте класс
<?php
class HiddenClass
{
protected $a = 'valueA'; // how to get it's value ?
}
class VisibleClass extends HiddenClass
{
public function getA()
{
return $this->a;
}
}
$obj = new VisibleClass();
print_r($obj->getA());
?>
Запуск: https://3v4l.org/t24Pb#v8.0.10
Решение №2: Рефлексия
Использовать рефлексию: (1)
<?php
class HiddenClass {
private $a = 'valueA'; // how to get it's value ?
}
$obj = new HiddenClass();
$reflector = new ReflectionObject($obj);
$nodes = $reflector->getProperty('a');
$nodes->setAccessible(true);
print_r($nodes->getValue($obj));
?>
Запускаем тут: https://3v4l.org/BHBiv#v8.0.10
Решение №3: Массивы
хакерская альтернатива — будет бросать объект в массив, а затем извлекать данные:
<?php
class HiddenClass {
private $a = 'valueA'; // how to get it's value ?
}
$arr = (array) new HiddenClass();
$nodes = $arr[chr(0) . 'HiddenClass' . chr(0) . 'a'];
print_r($nodes);
?>
Запуск: https://3v4l.org/hT93o#v8.0.10
Источники
(1) https://askdev.ru/q/v-php-kak-ya-mogu-poluchit-dostup-k-massivu-private-v-obekte-258931/
Нет Ответов