序列化与反序列化
-
概念
- 在PHP中,数组和对象无法保存
- 如果需要保存就要将数组或对象转换成一个序列
-
序列化 (serialize)
- 将数组或对象转换成一个序列
-
反序列化 (unserialize)
- 将序列化的字符串转换成数组或对象
数组的序列化与反序列化
# 数组的序列化
<?php
$stu= ['南京','泰州','盐城'];
$str= serialize($stu); //序列化
file_put_contents('./stu.txt', $str);
?>
# 数组的反序列化
<?php
$str= file_get_contents('./stu.txt');
$stu= unserialize($str); //反序列化
print_r($stu);
?>
对象的序列化与反序列化
- 注意
- 对象的反序列化需要有类的参与
- 如果没有类在反序列化时候无法确定类
# 对象的序列化
<?php
class Student {
public $name;
protected $sex;
private $add;
public function __construct($name, $sex, $add) {
$this->name= $name;
$this->sex= $sex;
$this->add= $add;
}
}
$stu= new Student('Sunny', '男', '北京');
$str= serialize($stu);
file_put_contents('./stu.txt', $str);
?>
# 对象的反序列化
<?php
$str= file_get_contents('./stu.txt');
$stu= unserialize($str);
echo '<pre>';
var_dump($stu);
echo '</pre>';
if(!is_string($stu)){
echo gettype($stu).'<br>';
}
foreach($stu as $key=>$value){
echo $key.': '.$value.'<br>';
}
?>