2015-11-03 80 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开发人员组讨论的内容 –

相关问题