2011-03-17 39 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