,php中的Serialize()函数有什么用处和好处

时间:2011-06-02 10:16:44

标签: php

我知道它生成一个值的可存储表示并用于访问php文件中的对象但是如果我在存储对象时不使用此函数该怎么办。

6 个答案:

答案 0 :(得分:3)

通过阅读官方PHP page,可以很容易地解释这一点:

  

生成值的可存储表示   这对于存储或传递PHP值非常有用,而不会丢失其类型和结构。

基本上你可以序列化一个对象在文件中写入字符串,在另一个请求上你可以简单地读取文件并反序列化它以加载最终的对象。

答案 1 :(得分:3)

假设您有一些帖子数据,但无法修改您的数据库/持久存储空间以将新的帖子数据存储在不同的字段中。

您可以序列化$ _POST数组并将其存储在您拥有的持久存储中。它对于生成基于用户的CRUD应用程序很有用。我发现将POST作为“有效载荷”存储的必要性有时非常宝贵。

知道你可以做某事,并不意味着你必须在任何地方使用它。

答案 2 :(得分:2)

当您想以“安全”格式存储或发送数据时,保留PHP类型和结构。

例如,您有一个带日文文本的UTF-8字符串。或者是一个多维数组。您可以将其保存到文本文件或插入数据库。

$array = array( 'key' => 'value', 'other_key' => 'other_value');
file_put_contents( 'array.txt', serialize( $array ) );

如果要使用存储的数据,可以使用“反序列化”功能:

$contents = file_get_contents( 'array.txt' );
$array = unserialize( $contents );

您可以序列化任何PHP类型的值,包括对象,但“资源”类型(数据库连接,文件处理程序等)除外

反序列化对象时,必须确保先前已加载其类。

更多PHP手册:http://php.net/serialize

答案 3 :(得分:1)

如果要将PHP变量(数组,类,字符串等)传递给另一个脚本/数据库/将其写入文件,则将其序列化。假设您有一个想要多次运行的小脚本,并且需要一个位置来在脚本运行之间保留一些数据。以下是您所做的草图:

if(file_exists($thefile)) {
    $data = unserialize(readfile($thefile));
} else {
    $data = array(); // or anything
}

// do something with data

$f = fopen($thefile);
fwrite($f, serialize($data));
fclose($f)

答案 4 :(得分:1)

序列化意味着将运行时变量转换为一致的形式。 通常这是代码段的简单字符串或XML表示。

用法:

<?php

    $user = new UserObjectFromDatabase();
    $data = serialize($user);

    http_reqeust_send($to = "some remote server", $data);
    // the remote server can now use unserialize($data) to re-construct the user object

?>

答案 5 :(得分:1)

您可以将PHP结构存储在文件,会话甚至数据库中。我用它来缓存文件或memcache中的查询结果。