2015-11-03 101 views
1

下面是我的課:如何實現Serializable接口,序列化/反序列化類/從機類型

class Pot implements Serializable 
{ 
    protected $a=1; 
    protected $b=2; 

    public function serialize() 
    { 
     return serialize(['a'=>$this->a,'b'=>$this->b]); 
    } 
    public function unserialize($data) 
    { 
     $values = unserialize($data); 
     $this->a = $values['a']; 
     $this->b = $values['b']; 
    } 
} 

$Ser = serialize(new Pot); 
//THIS IS WHAT I NEED: 
// a:2:{s:1:"a";i:1;s:1:"b";i:2;} 

我想序列化爲一個簡單的數組類,因爲我需要將它傳遞給外部系統,但仍然想在我的系統中將其反序列化爲原始類。
如何?

+0

是的,這是完全不同的問題。我標記了要由管理員刪除的問題。 最大的區別是我需要從序列化函數 –

回答

1

如果將它序列化爲一個簡單的數組,那麼系統無法告訴它最初是Pot,所以當您反序列化時,您將無法以這種方式得到Pot。如果您想要將一個名爲Box的類別作爲一個數組序列化 - 如何知道系統應該實例化哪一個?

可能你就必須做到這一點:

編寫返回從Pot類要在陣列的具體方法。使用它來獲取序列化的字符串,使其沒有課程信息。然後你需要一些工廠函數/類,它需要一個序列化數組並創建一個Pot類,然後使用setter/constructor設置屬性。如果他們不是全部將是Pots那麼你需要知道你想變成Pots哪些字符串(我懷疑這個位不會有問題)。

Serialize接口不會真的幫你解決這個問題我不這麼認爲。

+0

返回的序列化字符串的值謝謝......這就是我現在所做的,希望有一個更內在的方法來做到這一點。 –

+0

不是不這麼認爲。一旦它是一個簡單的數組(序列化),系統將無法分辨出之前的情況。 – Octo

+0

我可以理論上想到一種方法,在投射到簡單數組的對象內部投射並實現反序列化函數。然後,PHP引擎會知道將該字符串發送到正確的位置。我覺得現在這是PHP Internals開發人員組討論的內容 –

相關問題