«Знание — могущество».

10 февраля 2010

Как в PHP получить значение private-свойства

написал Figaroo в рубрике Web-разработка @ 23:31

Условие: нельзя менять исходный класс.
Решение: использовать оператор print_r и буферизацию вывода.

<?php

// проверочный класс
class Test {
	// приватное свойство
	private $value;
	// функция установки приватного свойства
	public function set($init) {
		$this->value = $init;
	}
}

// объект проверочного класса
$tmp = new Test();

// установим значение приватного свойства
$tmp->set(1024);

// получим значение приватного свойства
ob_start();
print_r($tmp);
$ob = ob_get_contents();
ob_end_clean();
preg_match("#\

value:private\

=> ([^\s]*)\n#is", $ob, $m); $value = $m[1]; echo $value; ?>

Комментарии (2) »

  1. Не понимаю смысла поста -> Зачем ? не Легче вот так:

    class Test {
    05	    // приватное свойство
    06	    private $value;
    07	    // функция установки приватного свойства
    08	    public function set($init) {
    09	        $this->value = $init;
    10	    }
                // Паблик доступ к переменной
    08	    public function get_value($init) {
    09	        return $this->value;
    10	    }
                // магические методы __get() мастдай из-за производительности
    11	}
    

    ==========
    а если речь идет о проблемах безопасности, то она понятная. PHP далек до идеала в этом смысле.

    PS: и все таки не понимаю смысла поста.
    <h1>Я попытался взломать сайт, а нука h1 будет или нет ?</h1>

    Комментарий by wartur — 15 февраля 2010 @ 21:42


  2. Смысл в том, чтобы сделать это, не изменяя сам класс. Сейчас добавлю в топик. :)
    Так-то понятно, что в реальном приложении нужно сделать обычный getter-метод))

    Комментарий by Figaroo — 16 февраля 2010 @ 00:51


RSS-лента комментариев к этой записи

Оставить комментарий

Пожалуйста, заполните все поля.

© Валерий 'Figaroo' Киркиж, 2008-2012 гг.