1

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

4

3 回答 3

3

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

于 2008-11-07T09:19:47.377 回答
1

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

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

于 2008-11-07T03:35:36.230 回答
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

于 2008-11-07T11:16:33.490 回答