使用指向其他对象的指针数组安全地序列化对象

时间:2015-08-25 14:18:21

标签: php arrays pointers serialization

对于我正在研究的PHP项目,我有一个对象(实际上是单例,但这并不是非常重要,我知道我需要为静态值做一个特殊情况)。该对象包含受保护的数组,每个数组都有指向10到30个其他对象的指针。

序列化(以及反序列化)整个数据结构的最简单方法是什么,同时保留所有相关的引用和索引(大多数数组都是这样)?

详情

程序处理每个由对象表示的卡片,这些对象由包(也是对象)收集并注册到名为box的对象。包也注册到box(通过引用传递对象),它保持两者的索引。 Box执行各种操作(比如从每个包中获取一张随机卡并将其添加到另一个数组(作为指针)并创建一个名为index的镜像阵列(少于这些卡),然后将它们随机播放。对象播放器(也可能用盒子注册)。

如果认为我可以简单地将盒子序列化并且一切都会好的,我会很高兴,但我强烈怀疑这一点。在对象混乱变成字符串并再次成为对象之后,我怎么能确定所有引用(指针数组)是完整和正确的(而不是对象的副本)?

更新

  1. 我试图简单地使用序列化转储框并获得
  2.   

    类包的对象无法在XYZ行的/path/to/box.class.php中转换为int

    说实话,这就是我的预期。因此,我的问题是关于我如何做到这一点。

    1. 也许我沟通不好?也许一些代码会使这更清楚。
    2. 请注意我们进行的参考存储有多少。如何实现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 ...
      
      }
      

1 个答案:

答案 0 :(得分:-1)

通过查看文档,$ _SESSION将自动为您序列化和存储对象。

示例:http://example.preinheimer.com/sessobj.php