2

私は次のものを持っています。

$foo;
$foo  = serialize($foo);
print_r($foo);

it gave me a result of N;

これが私が使用しているシステムに固有のものであるかどうか、またはこれが正常な結果であるかどうかはわかりません。私が知っているのは、それが私のサイトに大きな問題を引き起こしていたということだけです。

私の質問は...未定義の変数をシリアル化するとき、これは正常ですか?もしそうなら、誰かがこの結果を出力する理由を説明できますか?お時間をいただきありがとうございます。

4

2 に答える 2

5

文字列N;は のserialize()d 形式のようですnull。(このコードパッドを参照してください)
ただし、次の 2 つの点に注意してください。

  1. として宣言するだけであっても、すべての変数を使用する前に定義する必要がありますnull。そうしない$fooと、未定義の変数であるという通知が表示されます。警告を非表示にできると主張する人もいますが、これはお粗末な方法です。すべての変数に適切なデフォルトを使用して、それらを完全に防止する必要があります。
  2. 通常、 の出力を読む必要はありませんserialize()。DB、ファイル、または Memcached、APC、Redis などのメモリ キャッシュ システムに保存できます。serialize()ただし、 のおかげでの出力が何を意味するのかを理解する必要はありませんunserialize()
于 2012-06-16T03:52:48.673 に答える
2

期待どおりに動作します:

<?php

$foo;
$foo  = serialize($foo);
var_dump($foo); // Print the string "N"

$unserialized = unserialize($foo);
var_dump($unserialized); // Print NULL

しかし、なぜあなたはの出力を見ているのserializeですか? これはあなたのウェブサイトには関係ありません。重要なのはunserialize、正しいデータを返すことです。

于 2012-06-16T03:53:02.407 に答える