# 对象序列化

所有 PHP 里面的值都可以使用函数 `serialize()` 来返回一个包含字节流的字符串来表示，而 `unserialize()` 函数则能够重新把字符串变回 PHP 原来的值。序列化一个对象将会保存对象的所有变量，但是不会保存对象的方法，只会保存类的名字。为了能够 `unserialize()` 一个对象，这个对象的类必须已经定义过。

```php
<?php

require __DIR__ . '/Foo.php';
$foo = new Foo();
file_put_contents(__DIR__ . '/data.txt', serialize($foo));

```

上例中的 `Foo.php` 文件内容：

```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
<?php

require __DIR__ . '/Foo.php';
$foo = unserialize(file_get_contents(__DIR__ . '/data.txt'));
var_dump($foo->method()); // string(3) "foo"

```

