Как получить доступ к 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/
Нет Ответов