对于我正在研究的PHP项目,我有一个对象(实际上是单例,但这并不是非常重要,我知道我需要为静态值做一个特殊情况)。该对象包含受保护的数组,每个数组都有指向10到30个其他对象的指针。
序列化(以及反序列化)整个数据结构的最简单方法是什么,同时保留所有相关的引用和索引(大多数数组都是这样)?
详情
程序处理每个由对象表示的卡片,这些对象由包(也是对象)收集并注册到名为box的对象。包也注册到box(通过引用传递对象),它保持两者的索引。 Box执行各种操作(比如从每个包中获取一张随机卡并将其添加到另一个数组(作为指针)并创建一个名为index的镜像阵列(少于这些卡),然后将它们随机播放。对象播放器(也可能用盒子注册)。
如果认为我可以简单地将盒子序列化并且一切都会好的,我会很高兴,但我强烈怀疑这一点。在对象混乱变成字符串并再次成为对象之后,我怎么能确定所有引用(指针数组)是完整和正确的(而不是对象的副本)?
更新
类包的对象无法在XYZ行的/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 ...
}