检查序列化对象

时间:2008-11-07 03:30:32

标签: php serialization session-variables

是否有内置方法来了解给定的会话变量是否是序列化对象?假设我检索一个像$ _SESSION ['foo']这样的值,但我不知道它原来是一个字符串还是它是一个序列化对象。有没有办法检查,或者一旦序列化,PHP只是将字符串看作字符串作为字符串?

3 个答案:

答案 0 :(得分:3)

这是一个非常常见的误解,你必须在将对象放入会话之前手动序列化对象。事实并非如此。您可以简单地将对象实例分配给$_SESSION中的插槽,PHP将在请求之间为您自动序列化和反序列化。

答案 1 :(得分:1)

字符串是字符串是字符串。我认为你能做的最好的就是尝试反序列化,如果有效,它就可以了。如果没有,则不会。

唯一的另一种选择是使用正则表达式来查看它是否“看起来”像序列化对象。只是在它上面运行unserialize()可能会更容易。

答案 2 :(得分:1)

您可以使用is_a ...将其拉出会话并查看,您只需要知道要检查的类名。

if (is_a($_SESSION['foo'], 'UserInfoObject')) {
  // We have one
}

看起来PHP5有一个更简单的方法:

if ($_SESSION['foo'] instanceof UserInfoObject) {
      // We have one
}

http://www.php.net/manual/en/function.is-a.php