2012-06-16 201 views
0

我有以下;php serialize未定義變量

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

it gave me a result of N; 

現在我不知道這是否是我使用的系統是唯一的,或者如果這是正常結果。我所知道的是這是我的網站造成的主要問題。

我的問題是......序列化一個未定義的變量時這是正常的嗎?如果有,請解釋爲什麼它輸出這個結果。謝謝你的時間。

+0

'N' for'null'也許? –

+0

多數民衆贊成在我的想法,我試圖谷歌找到任何文件,但找不到任何東西。 –

+1

你不認爲序列化未定義的數據應該有未定義的行爲?在調用'serialize'之前定義它們怎麼樣? –

回答

2

看起來,字符串N;是d形式的null。 (See this codepad
然而,有兩兩件事需要注意:

  1. 你應該使用它們之前定義所有變量,即使你只是聲明爲null。否則,您會收到有關$foo是未定義變量的通知。有人認爲你可以隱藏警告,但這是不好的做法。您應該通過對所有變量使用合理的默認值來完全防止它們。
  2. 通常,不需要讀取serialize()的輸出。您可以將其存儲在數據庫,文件或Memcached,APC或Redis等內存緩存系統中。但是,您永遠不需要明白serialize()的輸出是什麼意思,因爲unserialize()
+0

這就是我一直在尋找的。謝謝 –

1

它按預期工作:

<?php 

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

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

但是爲什麼你在看的serialize輸出?這應該與您的網站無關。重要的是unserialize可以讓您恢復正確的數據。

+0

我同意。感謝您的反饋 –