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 に答える