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
没有扩展其他类)反序列化,你会发现它可以正确地反序列化。