对象序列化

所有 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"

results matching ""

    No results matching ""