是否有内置方法可以知道给定的会话变量是否是序列化对象?假设我检索了一个像 $_SESSION['foo'] 这样的值,但我不知道它最初是一个字符串还是一个序列化对象。有什么方法可以检查,或者一旦序列化 PHP 是否只是将字符串视为字符串?
Wilco
问问题
335 次
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
}
于 2008-11-07T11:16:33.490 回答