2015-08-25 5 views
-1

Для проекта PHP, над которым я работаю, у меня есть объект (одноэлемент на самом деле, но это не очень важно, я знаю, что мне нужно будет сделать специальный случай для статического значения (ы)). Этот объект содержит защищенные массивы, каждый из которых имеет указатели от десяти до тридцати других объектов.Безопасно сериализуйте объекты с массивами указателей на другие объекты

Каков самый простой способ сериализации (а также несериализации) всей структуры данных при сохранении всех соответствующих ссылок и индексов (что является большинством массивов)?

детали

Программа имеет дело с картами, каждый из которых представлены объектами и эти объекты собраны пакеты (также объекты) и зарегистрирован в качестве объекта называется поле. Пакеты также регистрируются в поле (передавая по ссылке объект), который поддерживает индекс обоих. Коробка выполняет различные операции (например, получение случайной карточки из каждого пакета и добавление ее в другой массив (как указатель) и создание зеркального массива (за исключением этих карт), называемого индексом, который он перетасовывает. Затем карты «обрабатываются» между экземплярами (который также, вероятно, зарегистрируется в поле).

Было бы неплохо подумать, что я могу просто сериализовать коробку, и все будет хорошо, но я сильно сомневаюсь в этом. Как я могу быть уверенным, что все ссылки (массивы указателей) являются неповрежденными и правильными (а не копиями объектов) после того, как беспорядок объектов стал вереницей и пошел обратно к тому, объектам снова?

ОБНОВЛЕНИЯ

  1. я попытался просто сбросить коробку с сериализацией и получил

Объект класса пакета не может быть преобразован в целом в /path/to/box.class.php на линии XYZ

Чтобы быть честным, это то, чего я ожидал. Таким образом, мой вопрос о том, как я это делаю.

  1. Возможно, я плохо общаюсь? Возможно, какой-то код станет более понятным.

Заметим только, насколько по справочной системе хранения у нас происходит. Как реализовать интерфейс Serializable для учетной записи?

<?php 

class box{ 
    public $cards = array(); 
    public $index = array(); 
    protected $solution = array(); 
    public $packs = array(); 

    public function shuffle(){ 
     if(count($this->index==0)){ 
      $this->index = $this->cards; 
     } 
     shuffle($this->index); 
    } 

    public function set_up(){ 
     $this->index = $this->cards; 
     foreach($this->packs as $pack){ 
      $card=$pack->chooseAtRandom(); 
      unset($this->index[$card->getID()]); 
      $this->solution[]&=$card; 
     } 
     $this->shuffle(); 
    } 

    public function registerPackToBox(&$pack){ 
     $this->packs[] &= $pack; 
     return (count($this->packs)-1); 
    } 

    public function registerCardToBox(&$card){ 
     $this->cards[] &= $card; 
     return (count($this->cards)-1); 
    } 

    // ... other stuff ... 

} 
+0

Не могли бы вы не просто написать свою собственную функцию сериализации для карты, а затем написать функцию сериализации для пакетов (который вызывает Serialize на каждой карточке) и т.д., пока вы не написали метод окончательного сериализация коробки? Также точка превращения объекта в строку - сделать его понятным для человеческого глаза. Зачем вам десериализовать строку для объекта? В любом случае вы можете найти эту информацию. http://community.sitepoint.com/t/object-equivalence-after-serialize/90031/5 –

+0

План заключается в сохранении объектов в сеансе. Я либо сериализую объекты, либо храню данные, и восстанавливаю объекты, которые, похоже, изобретают колесо. –

+0

Это может помочь. http://stackoverflow.com/questions/1442177/storing-objects-in-php-session.Я только что просмотрел его, он говорит: «объекты автоматически сериализуются в $ _SESSION, поэтому явная сериализация не нужна» –

ответ

-1

От взгляда на документы, $ _SESSION будет автоматически сериализовать и хранить объекты для вас.

Пример: http://example.preinheimer.com/sessobj.php

+0

Предполагая, что объекты могут быть ... Однако эти объекты содержат указатели на другие объекты. –

+0

Вы пытались сохранить его в сеансе? Я не понимаю, почему php не заботится о деталях указателя низкого уровня для вас. –

+0

Проблема ожидалась (и теперь доказано) дочерние объекты и указатели. PHP пытается и не делает их в ints. См. Обновление №1. –

Смежные вопросы