PHP变量处理函数,serialize()

时间:2011-03-18 15:51:30

标签: php serialization variables

首先,我已经阅读了PHP手册,我已经测试过了。 其次我还是不明白它到底是做什么的? 我为什么要序列化变量?

6 个答案:

答案 0 :(得分:5)

原因可能是将值存储在文本文件或数据库中。 serialize()将非文本值转换为文本(例如二进制整数或浮点值),以便它们可以很容易地以这种格式存储,并且可以使用unserialize()轻松转换回...如果您实际查看会话文件,这是存储为序列化字符串的$ _SESSION数组,当你执行session_start()时,可以很容易地将其转换回$ _SESSION数组。

答案 1 :(得分:5)

您可能不希望序列化变量,但序列化对象和其他复杂数据结构非常有用。

不是创建包含大量列的数据库表,而是创建一个包含主键和blob的表,并将类或数组序列化到其中。这样,您就拥有了一个无限灵活的系统,如果您需要向数据库表中添加新数据,则无需添加更多列。

这是一个愚蠢的例子,但如果你考虑的话,将对象持久存储到数据库中非常有用。

答案 2 :(得分:2)

序列化单个变量没有多大意义。序列化数组或对象更有用:

$array = array(
     0 => 'hello',
     1 => 'there',
     'how' => 'are',
     'you' => '?'
);

$txt = serialize($array);
echo($txt); //

产生

a:4:{i:0;s:5:"hello";i:1;s:5:"there";s:3:"how";s:3:"are";s:3:"you";s:1:"?";}

您可以使用此文本字符串,将其存储在数据库中,通过电子邮件发送,将其填充到文本文件中等等...然后检索它并将其转换回具有简单{{1}的PHP数组调用。

答案 3 :(得分:1)

序列化变量意味着“将其转换为字符串”。基本上,它是一种将变量转换为可以轻松存储以供将来使用的形式的方法。

想象一下这种情况:你有一个包含大量信息的数组。您需要将其存储在文本文件中,以备下次需要时使用。默认情况下,将数组转换为字符串会产生意外结果。例如,这样做:

file_put_contents('file.txt', array('foo', 'bar'));

将字符串foobar放入文本文件中。您无法轻易将其转换回数组。 serialize将数组转换为:

file_put_contents('file.txt', serialize(array('foo', 'bar')));
// a:2:{i:0;s:3:"foo";i:1;s:3:"bar";}

这不容易阅读,但unserialize函数可以很容易地将其转换回数组。

答案 4 :(得分:1)

PHP中的serialize函数将数据结构转换为可存储的字符串。序列化数据(例如变量,数组或对象)以存储在数据库或其他存储位置。一旦反序列化,您可以在检索后重新使用此数据。这是一个例子:

$data = array("key"=>"value");
$serialized = serialize($data);

// Shows the serialized string representing the array:
// string(28) "a:1:{s:3:"key";s:5:"value";}"
var_dump($serialized);

$unserialized = unserialize($serialized);

// Shows the original array named $data:
// array(1) { ["key"]=>  string(5) "value" } 
var_dump($unserialized);

答案 5 :(得分:0)

它以可以传输和存储的形式写入变量。例如,在将变量写入文件,数据库或仅将其存储在HTTP会话中之前,必须序列化变量