2011-03-17 33 views
1

我试图序列化一个SplFileObject,它在5.2中默默地失败,并在5.3中引发致命错误。到目前为止,我已经通过继承SplFileObject和实施使用(简体)下面的代码Serializable接口固定的问题在5.2(完整版也处理$ open_mode和$上下文,但是这不是有关这个问题):如何使用PHP 5.3序列化SplFileObject?

<?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方法,都无济于事。

Google似乎对此知之甚少,所以我仍然想知道是否可以在5.3中序列化一个SplFileObject。

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

+1

快速查看一下PHP源代码,显示如下:'spl_ce_SplFileInfo-> serialize = zend_class_serialize_deny;',这意味着序列化SplFileObject永远不会发生:( – 2011-03-17 10:04:04

回答

0

显然你不允许序列化它。经测试,在命令行模式,这是我的本钱:

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

不多徘徊考虑到资源(MySQL连接,文件处理程序)不能被序列化,并SplFileObject是所有基于一个文件资源。

+0

好吧,事情是我通过Serializable接口和__sleep/__wakeup)是为了能够序列化资源的目的而定义的,结果我错了。 – 2011-03-17 10:03:31