Условие: нельзя менять исходный класс.
Решение: использовать оператор 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("#\
=> ([^\s]*)\n#is", $ob, $m);
$value = $m[1];
echo $value;
?>
Не понимаю смысла поста -> Зачем ? не Легче вот так:
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
Смысл в том, чтобы сделать это, не изменяя сам класс. Сейчас добавлю в топик. :)
Так-то понятно, что в реальном приложении нужно сделать обычный getter-метод))
Комментарий by Figaroo — 16 февраля 2010 @ 00:51