文章目錄
序列化是將變數裝換為可保存或傳輸的字串的程序;
反序列化就是在適當的時候把這個字串再轉化成原來的變數使用,
這兩個程序結合起來,可以輕松地存盤和傳輸資料,使程式更具維護性,
- serialize 和 unserialize
<?php
$arr = [
'name' => '小明',
'age' => 21,
'country' => '中國',
];
$s = serialize($arr);
$obj = unserialize($s);
echo $s;
echo "\n";
print_r($obj);
輸出結果:
a:3:{s:4:"name";s:6:"小明";s:3:"age";i:21;s:7:"country";s:6:"中國";}
Array
(
[name] => 小明
[age] => 21
[country] => 中國
)
當陣列值包含如雙引號、單引號或冒號等字符時,它們被反序列化后,可能會出現問題,為了克服這個問題,使用 base64_encode 和 base64_decode ,
$s = base64_encode(serialize($arr));
$obj = unserialize(base64_decode($s));
但是 base64 編碼將增加字串的長度,為了克服這個問題,可以和 gzcompress 一起使用,
$s = base64_encode(gzcompress(serialize($arr)));
$obj = unserialize(gzuncompress(base64_decode($s)));
- json_encode 和 json_decode
使用 JSON 格式序列化和反序列化是一個不錯的選擇:
- 使用 json_encode 和 json_decode 格式輸出要比 serialize 和 unserialize 格式快得多
- JSON 格式是可讀的
- JSON 格式比 serialize 回傳資料結果小
- JSON 格式是開放的、可移植的,其他語言也可以使用它,
<?php
$arr = [
'name' => '小明',
'age' => 21,
'country' => "中國",
];
$s = json_encode($arr);
$obj = json_decode($s);
echo $s;
echo "\n";
print_r($obj);
輸出結果:
{"name":"\u5c0f\u660e","age":21,"country":"\u4e2d\u56fd"}
stdClass Object
(
[name] => 小明
[age] => 21
[country] => 中國
)
- var_export 和 eval
var_export 函式把變數作為一個字串輸出;
eval 把字串當成 PHP 代碼來執行,反序列化得到最初變數的內容,
<?php
$arr = [
'name' => '小明',
'age' => 21,
'country' => "中國",
];
$s = var_export($arr, true);
eval('$obj=' . $s . ';');
echo $s;
echo "\n";
print_r($obj);
輸出結果:
array (
'name' => '小明',
'age' => 21,
'country' => '中國',
)
Array
(
[name] => 小明
[age] => 21
[country] => 中國
)
- wddx_serialize_value 和 wddx_deserialize
wddx_serialize_value 函式可以序列化陣列變數,并以 XML 字串形式輸出,
<?php
$arr = [
'name' => '小明',
'age' => 21,
'country' => "中國",
];
$s = wddx_serialize_value($arr);
$obj = wddx_deserialize($s);
echo $s;
echo "\n";
print_r($obj);
輸出結果:
<wddxPacket version='1.0'><header/><data><struct><var name='name'><string>小明</string></var><var name='age'><number>21</number></var><var name='country'><string>中國</string></var></struct></data></wddxPacket>
Array
(
[name] => 小明
[age] => 21
[country] => 中國
)
參考文章:PHP多種序列化/反序列化的方法
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/57764.html
標籤:其他
上一篇:前端開發工程師前景怎么樣?
