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

Tags

Нет комментариев

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.