【序列化的概念】
序列化是將對象狀態轉換為可保持或可傳輸的格式的過程
將對象的狀態信息轉換為可以存儲或傳輸的窗體的過程
通常
【JSON的概念】
JSON
【長度的比較】
如下一段代碼
class Foo {
public $int =
public $bool = TRUE;
public $array = array(array(
public function test($flag) {
echo $flag
}
public static function output($str) {
echo $str
}
public static function compare_serialize_and_json($data) {
$serialize_str = serialize($data);
self::output(
strlen($serialize_str));
$json_str = json_encode($data);
self::output(
}
}
$test_data = array(
//序列化數組
echo
Foo::compare_serialize_and_json($test_data);
$foo = new Foo();
echo
Foo::compare_serialize_and_json($foo);
輸出
數組
序列化後的值:a:
JSON後的值:{"wwww":
對象:
序列化後的值:O:
a:
JSON後的值:{"int":
很明顯的長度區別
原因
•serialize後字符串包含了子串的長度
•serialize有更加詳細的類型區分
【速度的比較】
以代碼說明問題
$max_index =
ini_set("memory_limit"
$array = array_fill(
echo
$start = xdebug_time_index();
for ($i =
$str = serialize($array);
}
$end = xdebug_time_index();
echo $end
echo
$start = xdebug_time_index();
for ($i =
$str = json_encode($array);
}
$end = xdebug_time_index();
echo $end
unset($array
輸出
serialize
json
serialize的速度在大數據量的情況下比json差了快一個數量級
從上面兩點看
【處理對象】
如下代碼
header("Content
class Foo {
public function test($flag) {
echo $flag
}
}
$foo = new Foo();
echo
$foo
$serialize_str = serialize($foo);
$obj = unserialize($serialize_str);
$obj
$foo
$json_str = json_encode($foo);
$obj = json_decode($json_str);
$obj
die();
輸出
反序列化測試
( ! ) Fatal error: Call to undefined method stdClass::test()
json無法處理對象方法等數據
【使用范圍】
•序列化使用serialize
•與對象無關的數據存儲可以使用json
•數據交換時使用JSON
•目前JSON是能用於UTF
From:http://tw.wingwit.com/Article/program/PHP/201311/20931.html