1

我正在尝试序列化一个 SplFileObject,它在 5.2 中静默失败并在 5.3 中引发致命错误。到目前为止,我已经解决了 5.2 中的问题,方法是继承 SplFileObject 并使用(简化)以下代码实现 Serializable 接口(完整版还处理 $open_mode 和 $context 但这与该问题无关):

<?php

class SerializableFileObject extends SplFileObject implements Serializable
{
  public function serialize()
  {
    return $this->getRealPath();
  }

  public function unserialize($serialized)
  {
    $this->__construct($serialized);
  }
}

但 5.3 仍然会抛出致命的:

PHP Fatal error:  Class SerializableFileObject could not implement interface Serializable in Unknown on line 0

我也尝试添加魔法__sleep__wakeup方法,但无济于事。

谷歌似乎对此知之甚少,所以我想知道是否有可能在 5.3 中序列化一个 SplFileObject。

更新:似乎那个问题没有答案(参见我的评论)。

4

1 回答 1

0

显然你不允许序列化它。在 cli 模式下测试,这就是我得到的:

Warning: Uncaught exception 'Exception' with message 'Serialization of 'SplFileObject' is not allowed' in php shell code:1

考虑到资源(mysql 连接、文件处理程序)不能被序列化,并且SplFileObject都是基于文件资源的,所以没有太多的徘徊。

于 2011-03-17T09:52:36.840 回答