我正在尝试序列化一个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。
更新:似乎这个问题没有答案(参见我的评论)。
答案 0 :(得分:0)
显然你不允许序列化它。在cli模式下测试,这就是我所拥有的:
Warning: Uncaught exception 'Exception' with message 'Serialization of 'SplFileObject' is not allowed' in php shell code:1
考虑到资源(mysql连接,文件处理程序)无法序列化,并且SplFileObject
全部基于文件资源,并没有多少游荡。