php序列化未定义的变量

时间:2012-06-16 03:37:00

标签: php serialization

我有以下内容;

$foo;
$foo  = serialize($foo);
print_r($foo);

it gave me a result of N;

现在我不知道这对我正在使用的系统是否是唯一的,或者这是否是正常结果。我所知道的是它导致我的网站出现重大问题。

我的问题是......在序列化未定义的变量时这是正常的吗?如果是这样,有人可以解释为什么它输出这个结果。谢谢你的时间。

2 个答案:

答案 0 :(得分:3)

字符串N;似乎是null的{​​{3}}形式。 (serialize()
但是,有两点需要注意:

  1. 您应该在使用它们之前定义所有变量,即使您只是将它们声明为null。否则,您将收到关于$foo是未定义变量的通知。有些人认为你可以隐藏警告,但这是不好的做法。您应该通过对所有变量使用合理的默认值来完全阻止它们。
  2. 通常,不需要读取serialize()的输出。您可以将其存储在数据库,文件或内存缓存系统(如Memcached,APC或Redis)中。但是,由于See this codepad,您永远不需要了解serialize()的输出意味着什么。

答案 1 :(得分:1)

按预期工作:

<?php

$foo;
$foo  = serialize($foo);
var_dump($foo); // Print the string "N"

$unserialized = unserialize($foo);
var_dump($unserialized); // Print NULL

但是你为什么要查看serialize的输出?这与您的网站无关。重要的是,unserialize会为您提供正确的数据。