我们可以采用 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 序列化和反序列化函数实例详解


基础教程推荐
- ThinkPHP5与单元测试PHPUnit使用详解 2023-04-01
- PHP实现文件上传与下载 2023-04-25
- PHP中substr函数字符串截取用法分析 2024-01-03
- 用php过滤危险html代码的函数 2023-08-10
- PHP使用zlib扩展实现GZIP压缩输出的方法详解 2022-10-12
- PHP htmlspecialchars_decode()函数用法讲解 2022-12-29
- PHP实现模拟http请求的方法分析 2022-10-02
- thinkphp框架实现路由重定义简化url访问地址的方法分析 2023-04-07
- php+iframe 实现上传文件功能示例 2023-04-01
- php实现多站点共用session实现单点登录的方法详解 2023-02-12