Для проекта PHP, над которым я работаю, у меня есть объект (одноэлемент на самом деле, но это не очень важно, я знаю, что мне нужно будет сделать специальный случай для статического значения (ы)). Этот объект содержит защищенные массивы, каждый из которых имеет указатели от десяти до тридцати других объектов.Безопасно сериализуйте объекты с массивами указателей на другие объекты
Каков самый простой способ сериализации (а также несериализации) всей структуры данных при сохранении всех соответствующих ссылок и индексов (что является большинством массивов)?
детали
Программа имеет дело с картами, каждый из которых представлены объектами и эти объекты собраны пакеты (также объекты) и зарегистрирован в качестве объекта называется поле. Пакеты также регистрируются в поле (передавая по ссылке объект), который поддерживает индекс обоих. Коробка выполняет различные операции (например, получение случайной карточки из каждого пакета и добавление ее в другой массив (как указатель) и создание зеркального массива (за исключением этих карт), называемого индексом, который он перетасовывает. Затем карты «обрабатываются» между экземплярами (который также, вероятно, зарегистрируется в поле).
Было бы неплохо подумать, что я могу просто сериализовать коробку, и все будет хорошо, но я сильно сомневаюсь в этом. Как я могу быть уверенным, что все ссылки (массивы указателей) являются неповрежденными и правильными (а не копиями объектов) после того, как беспорядок объектов стал вереницей и пошел обратно к тому, объектам снова?
ОБНОВЛЕНИЯ
- я попытался просто сбросить коробку с сериализацией и получил
Объект класса пакета не может быть преобразован в целом в /path/to/box.class.php на линии XYZ
Чтобы быть честным, это то, чего я ожидал. Таким образом, мой вопрос о том, как я это делаю.
- Возможно, я плохо общаюсь? Возможно, какой-то код станет более понятным.
Заметим только, насколько по справочной системе хранения у нас происходит. Как реализовать интерфейс 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 ...
}
Не могли бы вы не просто написать свою собственную функцию сериализации для карты, а затем написать функцию сериализации для пакетов (который вызывает Serialize на каждой карточке) и т.д., пока вы не написали метод окончательного сериализация коробки? Также точка превращения объекта в строку - сделать его понятным для человеческого глаза. Зачем вам десериализовать строку для объекта? В любом случае вы можете найти эту информацию. http://community.sitepoint.com/t/object-equivalence-after-serialize/90031/5 –
План заключается в сохранении объектов в сеансе. Я либо сериализую объекты, либо храню данные, и восстанавливаю объекты, которые, похоже, изобретают колесо. –
Это может помочь. http://stackoverflow.com/questions/1442177/storing-objects-in-php-session.Я только что просмотрел его, он говорит: «объекты автоматически сериализуются в $ _SESSION, поэтому явная сериализация не нужна» –