对于我工作的PHP项目,我有一个对象(实际上是一个单例,但这不是非常重要,我知道我需要为静态值做一个特殊的情况)。该对象包含受保护的数组,每个数组都有指向10到30个其他对象的指针。
在保持所有相关引用和索引(这是大多数数组)的同时,序列化(也反序列化)整个数据结构的最简单方法是什么?程序处理由对象表示的卡片,这些对象由包(也是对象)收集,并注册到一个名为box的对象。包也注册到box(通过引用传递对象),box维护两者的索引。Box执行各种操作(例如从每个包中随机获得一张牌并将其添加到另一个数组中(作为指针),并创建一个称为索引的镜像数组(较少这些牌),并进行洗牌。然后在对象玩家的实例之间"发牌"(这也可能与box注册)。
认为我可以简单地序列化box,一切都会很好,但我强烈怀疑这一点。我怎么能确保所有的引用(指针数组)是完整的和正确的(而不是对象的副本)后,对象的混乱已经成为一个字符串,又回到了对象?
- 我试图简单地用序列化转储盒子,得到
类pack的对象无法在/path/to/box.class.php中转换为int
老实说,那正是我所期望的。因此,我的问题是我如何去做这件事。
- 也许我沟通不好?也许一些代码会使这更清楚。
请注意我们有多少引用存储空间。如何实现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 ...
}
通过查看文档,$_SESSION将自动为您序列化和存储对象。
示例:http://example.preinheimer.com/sessobj.php