danog/magicalserializer

序列化易变、线程化或其他任何内部PHP类!

1.0 2018-02-20 10:35 UTC

This package is auto-updated.

Last update: 2024-09-11 14:49:26 UTC


README

许可协议:AGPLV3,由Daniil Gentili创建(https://daniil.it)。

这个库允许你序列化扩展pthreads的Volatile或Threaded类,或者任何其他具有自定义序列化器的内部类。

它还提供了旧序列化(你的对象尚未扩展Threaded/Volatile)和新序列化(它们扩展了它们)之间的双向兼容性。

使用composer安装它,包名是danog/magicalserializer

此库的使用非常简单,以下是一些示例(更多示例请参阅a.php和b.php)

<?php

class a
{
    public function __construct() {
        var_dump("Constructed!");
        $this->a = 'pony';
    }
    public function __wakeup() {
        var_dump($this->a);
    }
}
$a = new a;
file_put_contents('test', serialize($a));

如你所见,这里a没有扩展任何类,我们将其实例序列化到文件test中。此示例还打印了Constructed!,因为构造函数__magic_construct被调用。

<?php

class a extends \Volatile
{
    use \danog\Serializable;
    public function __magic_construct() {
        var_dump("Constructed!");
        $this->a = 'pony';
    }
    public function __wakeup() {
        var_dump($this->a);
    }
}
$a = \danog\Serialization::unserialize(file_get_contents('test'));
var_dump($a);
$othera = new a;

我们只需包含特质\danog\Serializable即可使类可序列化。
这将正确地反序列化test的内容,重新创建a的实例,唯一的区别是现在它是线程安全的。
当然,唤醒函数将被调用,所以会打印出pony
你可能已经注意到,构造函数现在被调用为__magic_construct而不是__construct:这是一个必须的更改,否则此库将无法工作。
当然,当a被实例化时,构造函数仍然会被调用(你将看到消息Constructed!弹出)。

如果你尝试使用\danog\Serialization::serialize序列化$a$othera并将其从第一个脚本(其中a没有扩展其他类)反序列化,你会发现它可以正确地反序列化。