对象序列化
所有 PHP 里面的值都可以使用函数 serialize()
来返回一个包含字节流的字符串来表示,而 unserialize()
函数则能够重新把字符串变回 PHP 原来的值。序列化一个对象将会保存对象的所有变量,但是不会保存对象的方法,只会保存类的名字。为了能够 unserialize()
一个对象,这个对象的类必须已经定义过。
<?php
require __DIR__ . '/Foo.php';
$foo = new Foo();
file_put_contents(__DIR__ . '/data.txt', serialize($foo));
上例中的 Foo.php
文件内容:
<?php
class Foo
{
/**
* Just a test property.
*
* @var string
*/
public string $property = 'foo';
/**
* Return the specified property.
*
* @param void
* @return string
*/
public function method(): string
{
return $this->property;
}
}
如果要想在另外一个文件中反序列化一个对象,这个对象的类必须在解序列化之前定义,可以通过包含一个定义该类的文件或使用函数 spl_autoload_register()
来实现。
<?php
require __DIR__ . '/Foo.php';
$foo = unserialize(file_get_contents(__DIR__ . '/data.txt'));
var_dump($foo->method()); // string(3) "foo"