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 序列化和反序列化函数实例详解 - Python技术站