Проверка сериализованных объектов - PullRequest
1 голос
/ 07 ноября 2008

Есть ли встроенный способ узнать, является ли данная переменная сеанса сериализованным объектом? Скажем, я получаю значение типа $ _SESSION ['foo'], но я не знаю, было ли оно изначально строкой или сериализованным объектом. Есть какой-то способ проверить, или после сериализации PHP просто видит строку как строку как строку?

Ответы [ 3 ]

3 голосов
/ 07 ноября 2008

Это довольно распространенное заблуждение, что вам нужно вручную сериализовать объекты, прежде чем запускать их в сеанс. Это не относится к делу. Вы можете просто назначить экземпляр объекта для слота в $_SESSION, и PHP автоматически сериализует и десериализует его для вас между запросами.

1 голос
/ 07 ноября 2008

Вы можете использовать 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

1 голос
/ 07 ноября 2008

Строка является строкой является строкой. Я думаю, что лучшее, что вы сможете сделать, это просто попытаться десериализовать его, и если это работает, это работает. Если нет, то нет.

Единственным другим вариантом будет использование регулярного выражения, чтобы увидеть, выглядит ли оно как сериализованный объект. Просто запустить unserialize() на этом может быть проще.

...