PHP序列化與反序列化

  • 序列化,指將PHP中 對(duì)象、類(lèi)、數(shù)組、變量、匿名函數(shù)等,轉(zhuǎn)化為字符串,用戶(hù)「數(shù)據(jù)庫(kù)存儲(chǔ)」、「數(shù)據(jù)的傳輸」
  • 反序列化,將字符串轉(zhuǎn)為:對(duì)象、類(lèi)、數(shù)組、變量、匿名函數(shù)
  • 序列化在每個(gè)編程語(yǔ)言里面都存在,比如MFC
  • 廣義的說(shuō):將一個(gè)Word保存為docx,這就是序列化的過(guò)程。打開(kāi)docx文檔,顯示內(nèi)容,就是反序列化的過(guò)程
  • ini/json/XML也是序列化的一種

1. serialize和unserialize函數(shù)

這兩個(gè)是序列化和反序列化PHP中數(shù)據(jù)的常用函數(shù)。

class person {
    public $name;
    public $gender;

    public function say() {
        echo $this->name," is ",$this->gender;
    }
}

$student = new person();
$student->name = 'Tom';
$student->gender = 'male';
$student->say();

$str = serialize($student);
echo $str;
//O:6:"person":2:{s:4:"name";s:3:"Tom";s:6:"gender";s:4:"male";}

$student_str = array(
                    'name' => 'Tom',
                    'gender' => 'male',
                    );
echo serialize($student_str);
//a:2:{s:4:"name";s:3:"Tom";s:6:"gender";s:4:"male";}

//容易看出,對(duì)象和數(shù)組在內(nèi)容上是相同的,他們的區(qū)別在于對(duì)象有一個(gè)指針,指向了他所屬的類(lèi)。

2. json_encode 和 json_decode

JSON格式是開(kāi)放的、可移植的。其他語(yǔ)言也可以使用它,使用json_encode和json_decode格式輸出要比serialize和unserialize格式快得多。

$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');

$json = json_encode($a);
echo $json;

echo '<pre>';
echo '<br /><br />';
var_dump(json_decode($json));
echo '<br /><br />';
var_dump(json_decode($json, true));

--------------------------------------------------------------------
{"a":"Apple","b":"banana","c":"Coconut"}


object(stdClass)#1 (3) {
  ["a"]=>
  string(5) "Apple"
  ["b"]=>
  string(6) "banana"
  ["c"]=>
  string(7) "Coconut"
}


array(3) {
  ["a"]=>
  string(5) "Apple"
  ["b"]=>
  string(6) "banana"
  ["c"]=>
  string(7) "Coconut"
}

json_decode轉(zhuǎn)換時(shí)不加參數(shù)默認(rèn)輸出的是對(duì)象,如果加上true之后就會(huì)輸出數(shù)組。

3. var_export 和 eval

var_export 函數(shù)把變量作為一個(gè)字符串輸出;eval把字符串當(dāng)成PHP代碼來(lái)執(zhí)行,反序列化得到最初變量的內(nèi)容。

$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');

$s = var_export($a , true);
echo $s;

echo '<br /><br />';

eval('$my_var=' . $s . ';');

print_r($my_var);

------------------------------------------------------------
array ( 'a' => 'Apple', 'b' => 'banana', 'c' => 'Coconut', )

Array ( [a] => Apple [b] => banana [c] => Coconut )
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • php.ini設(shè)置,上傳大文件: post_max_size = 128Mupload_max_filesize ...
    bycall閱讀 6,997評(píng)論 3 64
  • PHP 學(xué)習(xí)目錄 ├─PHP視頻教程 1 LAMP網(wǎng)站構(gòu)建 │ ├─PHP教程 1.1.1 新版視頻形式介紹│ ...
    曹淵說(shuō)創(chuàng)業(yè)閱讀 16,282評(píng)論 29 417
  • php usleep() 函數(shù)延遲代碼執(zhí)行若干微秒。 unpack() 函數(shù)從二進(jìn)制字符串對(duì)數(shù)據(jù)進(jìn)行解包。 uni...
    思?jí)鬚HP閱讀 2,133評(píng)論 1 24
  • 序列化是將變量轉(zhuǎn)換為可保存或傳輸?shù)淖址倪^(guò)程;反序列化就是在適當(dāng)?shù)臅r(shí)候把這個(gè)字符串再轉(zhuǎn)化成原來(lái)的變量使用。這兩個(gè)...
    FrancisSoung閱讀 632評(píng)論 0 0
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,533評(píng)論 19 139

友情鏈接更多精彩內(nèi)容