这个和java的序列话是一样的。只是java要实现Serializable这个空接口。
serialize() 把变量和它们的值编码成文本形式
unserialize() 恢复原先变量
什么情况下需要序列化 当你想把的内存中的对象写入到硬盘 数据库的时候; 当你想在网络上传送对象的时候;
当把这些序列化的数据放在URL中在页面之间会传递时,需要对这些数据调用urlencode(),以确保在其中的URL元字符进行处理
margic_quotes_gpc和magic_quotes_runtime配置项的设置会影响传递到unserialize()中的数据。
如果magic_quotes_gpc项是启用的,那么在URL、POST变量以及cookies中传递的数据在反序列化之前必须用stripslashes()进行处理:
如果magic_quotes_runtime是启用的,那么在向文件中写入序列化的数据之前必须用addslashes()进行处理,而在读取它们之前则必须用stripslashes()进行处理:
也可用array,把一个数组对象系列化。
<?php
class Data{
var $index;
var $name;
function __construct($index,$name){
$this->index = $index;
$this->name = $name;
}
}
$data1 = new Data(1, "hello");
$data2 = new Data(2, "world");
$arr = array();
//用ArrayObject也可以。
//$arr = new ArrayObject();
$arr[0] = $data1;
$arr[1] = $data2;
$str = serialize($arr);
$file = fopen("tmp.txt", "w");
fwrite($file, $str);
fclose($file);
//$file =fopen("tmp.txt", "r");
$data = file_get_contents("tmp.txt");
//反序列化得到原来的数组对象。
$obj = unserialize($data);
print_r($obj[0]);
echo $obj[0]->name;
?>
tmp.txt的内容为:
a:2:{i:0;O:4:"Data":2:{s:5:"index";i:1;s:4:"name";s:5:"hello";}i:1;O:4:"Data":2:{s:5:"index";i:2;s:4:"name";s:5:"world";}}