如何使用PHP 5.3序列化SplFileObject?

时间:2011-03-17 09:31:16

标签: php spl

我正在尝试序列化一个SplFileObject,它在5.2中无声地失败并在5.3中引发致命错误。到目前为止,我已经通过子类化SplFileObject并使用(简化的)以下代码实现Serializable接口来解决5.2中的问题(完整版本也处理$ 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。

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

1 个答案:

答案 0 :(得分:0)

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

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

考虑到资源(mysql连接,文件处理程序)无法序列化,并且SplFileObject全部基于文件资源,并没有多少游荡。