Активный участник
Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011
Откуда: Москва
Помог: 221 раз(а)
|
Реализация №1 (Отобразить)PHP:
скопировать код в буфер обмена
class myStdClass { public function __construct (array $data) { foreach ($data as $key => $value) { $value = new self($value); } $this->{$key} = $value; } } // Добавим метод для примера, преобразующий цепочку // вложенных объектов в ассоциативный массив: public function toArray() { foreach ($this as $key => $value) { if ($value instanceof self) { $value = $value->toArray(); } $data[$key] = $value; } return $data; } } function jsonDecode($sJson, $assoc = false) { }
Примеры (Отобразить)PHP:
скопировать код в буфер обмена
$rJson = jsonDecode($sJson); echo '<pre>', '2) ', $rJson->foo->bar, '<br><br>', '3) ', print_r($rJson->foo, 1), '<br>', '4) ', print_r($rJson->toArray(), 1), '<br>', '5) ', print_r($rJson->foo->toArray(), 1), '<br>', '</pre>';
Результат (Отобразить)PHP:
скопировать код в буфер обмена
/* 1) myStdClass Object ( [foo] => myStdClass Object ( [bar] => Hello! ) ) 2) Hello! 3) myStdClass Object ( [bar] => Hello! ) 4) Array ( [foo] => Array ( [bar] => Hello! ) ) 5) Array ( [bar] => Hello! ) */
Во второй реализации объекты будут создаваться динамически (единожды)
в момент обращения к свойству, если текущее значение является массивом,
чтобы не плодить объекты, которые не будут использованы.
Если класс не переполнен функционалом - это не критично,
в противном случае может заметно увеличиться потребление памяти.
Реализация №2 (Отобразить)PHP:
скопировать код в буфер обмена
class myStdClass { private $__rgVars = array(); public function __construct (array $data) { $this->__rgVars = $data; } public function __get($key) { { throw new Exception( 'Неопределённое свойство <b>' . get_class($this) . '::' . $key . '</b>' ); } $this->__rgVars[$key] = new self($this->__rgVars[$key]); } return $this->__rgVars[$key]; } public function __set($key, $value) { $this->__rgVars[$key] = $value; } public function toArray() { foreach ($this->__rgVars as $key => $value) { if ($value instanceof self) { $value = $value->toArray(); } $data[$key] = $value; } return $data; } } function jsonDecode($sJson, $assoc = false) { }
(Отредактировано автором: 28 Ноября, 2013 - 09:36:22)
|