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