PHP 序列化和反序列化函数实例详解

我们可以采用 serialize() 函数将一个对象进行序列化处理。假设我们有一个 User 类,我们可以通过如下代码对其进行序列化处理:

PHP 序列化和反序列化函数实例详解

什么是 PHP 序列化和反序列化

PHP 序列化指将 PHP 对象(数组、类实例等)转化为字符串的过程,进行序列化后我们就可以将其存储或者传输到其他 PHP 程序中进行反序列化。PHP 反序列化则是将序列化后的字符串还原为 PHP 对象。
在序列化与反序列化的过程中,我们可以采用 serialize() 和 unserialize() 函数来实现。

序列化对象

我们可以采用 serialize() 函数将一个对象进行序列化处理。假设我们有一个 User 类,我们可以通过如下代码对其进行序列化处理:

<?php 
class User {
    public $username;
    public $email;
    public function __construct($username, $email) {
        $this->username = $username;
        $this->email = $email;
    }
}

$user = new User('test', 'test@example.com');
$serialized = serialize($user);
var_dump($serialized); // 输出: string(87) "O:4:"User":2:{s:8:"username";s:4:"test";s:5:"email";s:15:"test@example.com";}"
?>

可以看到,序列化后的字符串中含有 O:4:“User”:2: 等字符,代表将 User 对象序列化后的类型、属性个数等信息,跟在其后面的 s:8:"username" 则代表对象类中属性 username 的值,以此类推。

反序列化对象

反序列化时可以通过 unserialize() 函数将序列化处理后的字符串进行反序列化。下面以序列化对象为例进行反序列化的示例。

<?php
class User {
    public $username;
    public $email;
    public function __construct($username, $email) {
        $this->username = $username;
        $this->email = $email;
    }
}

$serialized = 'O:4:"User":2:{s:8:"username";s:4:"test";s:5:"email";s:15:"test@example.com";}';

$user = unserialize($serialized);

echo $user->username . ' ' . $user->email;
// 输出: test test@example.com
?>

当我们反序列化时,会得到一个 User 对象,可以直接访问其属性。

序列化数组

同样的,我们也可以对 PHP 数组进行序列化和反序列化。从下面的示例语句中可以看到,使用 serialize() 函数将数组$data存储到文件中,然后使用unserialize()函数将存储在文件中的数据重新读到$temp_data数组中。

<?php
$data = array('foo', 'bar', 'baz');
$file = 'data.txt';

file_put_contents($file, serialize($data));

$temp_data = unserialize(file_get_contents($file));
var_dump($temp_data);  // 输出:array(3) { [0]=> string(3) "foo" [1]=> string(3) "bar" [2]=> string(3) "baz" }
?>

总结

本文讲述了 PHP 序列化和反序列化的概念、具体实现方法,通过对用户对象和数组进行序列化和反序列化的介绍,让大家能够了解更多 PHP 序列化和反序列化知识。

本文标题为:PHP 序列化和反序列化函数实例详解

基础教程推荐