亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > PHP序列化的四種實現方法與橫向對比

PHP序列化的四種實現方法與橫向對比

熱門標簽:智能電銷語音機器人資訊 400 電話 辦理 兼職做地圖標注好賺錢嗎 打開百度地圖標注 亳州企業外呼系統 海南外呼系統方案 山東電銷卡外呼系統原理是什么 地圖標注怎么做商戶驗證 蘇州外呼系統有效果嗎

一、PHP 序列化變量的 4 種方法

序列化是將變量轉換為可保存或傳輸的字符串的過程;反序列化就是在適當的時候把這個字符串再轉化成原來的變量使用。這兩個過程結合起來,可以輕松地存儲和傳輸數據,使程序更具維護性。

1. serialize和unserialize函數

這兩個是序列化和反序列化PHP中數據的常用函數。

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

//序列化數組
$s = serialize($a);
echo $s;
//輸出結果:a:3:{s:1:"a";s:5:"Apple";s:1:"b";s:6:"banana";s:1:"c";s:7:"Coconut";}

echo 'br />br />';

//反序列化
$o = unserialize($s);

print_r($o);

當數組值包含如雙引號、單引號或冒號等字符時,它們被反序列化后,可能會出現問題。為了克服這個問題,一個巧妙的技巧是使用base64_encode和base64_decode。

$obj = array();
//序列化
$s = base64_encode(serialize($obj)); 
//反序列化
$original = unserialize(base64_decode($s)); 

但是base64編碼將增加字符串的長度。為了克服這個問題,可以和gzcompress一起使用。

//定義一個用來序列化對象的函數

function my_serialize( $obj ) 
{ 
  return base64_encode(gzcompress(serialize($obj))); 
} 

//反序列化
function my_unserialize($txt) 
{ 
  return unserialize(gzuncompress(base64_decode($txt))); 
} 

2. json_encode 和 json_decode

使用JSON格式序列化和反序列化是一個不錯的選擇:

  • 使用json_encode和json_decode格式輸出要serialize和unserialize格式快得多。
  • JSON格式是可讀的。
  • JSON格式比serialize返回數據結果小。
  • JSON格式是開放的、可移植的。其他語言也可以使用它。
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');

//序列化數組
$s = json_encode($a);
echo $s;
//輸出結果:{"a":"Apple","b":"banana","c":"Coconut"}

echo 'br />br />';

//反序列化
$o = json_decode($s);

在上面的例子中,json_encode輸出長度比上個例子中serialize輸出長度顯然要短。

3. var_export 和 eval

var_export 函數把變量作為一個字符串輸出;eval把字符串當成PHP代碼來執行,反序列化得到最初變量的內容。

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

//序列化數組
$s = var_export($a , true);
echo $s;
//輸出結果: array ( 'a' => 'Apple', 'b' => 'banana', 'c' => 'Coconut', )

echo 'br />br />';

//反序列化
eval('$my_var=' . $s . ';');

print_r($my_var);

4. wddx_serialize_value 和 wddx deserialize

wddx_serialize_value函數可以序列化數組變量,并以XML字符串形式輸出。

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

//序列化數組
$s = wddx_serialize_value($a);
echo $s;

//輸出結果(查看輸出字符串的源碼):wddxPacket version='1.0'>header/>data>struct>var name='a'>string>Apple/string>/var>var name='b'>string>banana/string>/var>var name='c'>string>Coconut/string>/var>/struct>/data>/wddxPacket>

echo 'br />br />';

//反序列化
$o = wddx_deserialize($s);

print_r($o);
//輸出結果:Array ( [a] => Apple [b] => banana 1 => Coconut )

可以看出,XML標簽字符較多,導致這種格式的序列化還是占了很多空間。

結論

上述所有的函數在序列化數組變量時都能正常執行,但運用到對象就不同了。例如json_encode序列化對象就會失敗。反序列化對象時,unserialize和eval將有不同的效果。

英文原文:3 ways to serialize variables in php

二、PHP四種序列化方案橫向對比

數據的序列化是一個非常有用的功能,然而目測很多人跟我一樣,在剛接觸這玩意的時候壓根就不理解這貨色到底是干啥用的,反正老師說了,實在理解不了就先背過再說。

其實將數據序列化的作用無外乎有兩個:

  • 方便傳輸
  • 方便存儲

方便存儲如何理解呢?比如我們有個PHP對象或者一個PHP數組需要存儲到數據庫甚至文件中,這顯然是不可能的,這個時候必須要將PHP對象或者PHP數組序列化后再執行存儲操作。不過這將PHP數組序列化后存起來還能理解,這對象也能存儲啊?這操作是否過于風騷?少年,這一點兒都不風騷。有些時候將對象直接存儲起來,用的時候只需要簡單的反序列化后就可以投產使用了,避免了new一次帶來的性能耗費。

方便傳輸如何理解呢?其實序列化在傳輸中應用的相對更多更常見些許。最簡單的一個例子,一個碼前端的碼了一個ajax找你給TA提供一個API,那么這個時候你倆得商量返回什么數據,比如json或者xml,甚至你倆自己作死約定私有數據格式。比如在一個比較典型的服務架構中,網關服務器和內部RPC服務器之間通過msgpack傳遞數據。這都是典型的序列化為了傳輸的典型應用案例。

這里序列化的概念可能更為廣泛和籠統一些,包括傳統的serialize、json、msgpack、protobuf等。( 如果你覺得序列化這個稱呼不太嚴謹的話,可以用encode來代替;反序列化則用decode來代替。反正我就用統統用序列化和反序列化來稱呼了,如果你覺得實在不舒服,可以順著網線來砍我!)。

實際上,從更高的層面看,數據的序列化可以分為兩種:

  • 文本序列化,常見如json、serialize、xml等
  • 二進制序列化,常見如msgpack、protobuf、thrift等

一般說來,考驗序列化技術的性能指標一共有兩個,一個是序列化的速度,一個是序列化后數據的大小,自然是序列化速度越快、序列化后的數據越小為佳。就目前來看,protobuf、msgpack等二進制序列化無論是速度上還是數據大小上,都要比文本序列化更好。不過話說回來,文本序列化有更好的可讀性,一眼就能瞪出來數據內容大概是啥玩意。

今天帶到這里的這里的有四個具體的方案,這四種方案都是簡單粗暴、開箱即用類型的,我們分別測試感受下,看哪個更適合我們。

參會的四個哥們:PHP內置的serialize、PHP內置的JSON解析器、PHP擴展JSOND、PHP擴展msgpack。其中前三個都是文本類型的,msgpack則是二進制類型的。

JSOND作為PHP內置的JSON解析器的高級版本,坊間一直傳聞速度上要比內置的更牛X一些,作為擴展,這貨需要額外安裝,附送地址:https://pecl.php.net/get/jsond-1.4.0.tgz。

msgpack是一個鳥哥等人搞的一套二進制序列化工具,slogan就是“It's like JSON.but fast and small.”,附送地址:https://pecl.php.net/get/msgpack-2.0.2.tgz

1、serialize用法
serialize(),序列化方法。
unserialize(),反序列化方法。

2、json用法
json_encode(),沒啥好說的吧?
json_decode(),沒啥好說的吧?

3、jsond用法
jsond_encode(),和json_encode()一樣,后面多個字母d而已。
jsond_decode(),和json_decode()一樣,后面多個字母d而已。

4、msgpack用法
msgpack_pack(),序列化方法。
msgpack_unpack(),反序列化方法。

測試代碼如下:

?php
// 故意搞了一個還算大的php數組,更容易看出差距來
$arr = array(
 array(
 'uid' => 22193123,
 'gender' => 'famale',
 'username' => 'elarity',
 'password' => md5('www123'),
 'relation' => array(
 array(
 'uid' => 22193123,
 'gender' => 'famale',
 'username' => 'elarity',
 'password' => md5('www123'),
 ),
 array(
 'uid' => 22193123,
 'gender' => 'famale',
 'username' => 'elarity',
 'password' => md5('www123'),
 ),
 array(
 'uid' => 22193123,
 'gender' => 'famale',
 'username' => 'elarity',
 'password' => md5('www123'),
 ),
 array(
 'uid' => 22193123,
 'gender' => 'famale',
 'username' => 'elarity',
 'password' => md5('www123'),
 ),
 array(
 'uid' => 22193123,
 'gender' => 'famale',
 'username' => 'elarity',
 'password' => md5('www123'),
 ),
 array(
 'uid' => 22193123,
 'gender' => 'famale',
 'username' => 'elarity',
 'password' => md5('www123'),
 ),
 array(
 'uid' => 22193123,
 'gender' => 'famale',
 'username' => 'elarity',
 'password' => md5('www123'),
 ),
 array(
 'uid' => 22193123,
 'gender' => 'famale',
 'username' => 'elarity',
 'password' => md5('www123'),
 ),
 array(
 'uid' => 22193123,
 'gender' => 'famale',
 'username' => 'elarity',
 'password' => md5('www123'),
 ),
 ),
 )
);

// 每種序列化方案都執行100000次
$counter = 100000;

// json序列化方案,執行100000次
echo PHP_EOL.PHP_EOL;
$start = microtime( true );
for( $i = 1; $i = $counter; $i++ ){
 $json = json_encode( $arr ); 
}
$size = strlen( $json );
$end = microtime( true );
$cost_time = $end - $start;
echo "json_encode : 耗費時間為{$cost_time} , 數據體積為{$size}".PHP_EOL;

// jsond序列化方案,執行100000次
$start = microtime( true );
for( $i = 1; $i = $counter; $i++ ){
 $jsond = jsond_encode( $arr ); 
}
$size = strlen( $jsond );
$end = microtime( true );
$cost_time = $end - $start;
echo "jsond_encode : 耗費時間為{$cost_time} , 數據體積為{$size}".PHP_EOL;

// serialize序列化方案,執行100000次
$start = microtime( true );
for( $i = 1; $i = $counter; $i++ ){
 $serialize = serialize( $arr ); 
}
$size = strlen( $serialize );
$end = microtime( true );
$cost_time = $end - $start;
echo "serialize : 耗費時間為{$cost_time} , 數據體積為{$size}".PHP_EOL;

// msgpack序列化方案,執行100000次
$start = microtime( true );
for( $i = 1; $i = $counter; $i++ ){
 $msgpack = msgpack_pack( $arr );
}
$size = strlen( $msgpack );
$end = microtime( true );
$cost_time = $end - $start;
echo "msgpack耗費時間為 : {$cost_time} , 數據體積為{$size}".PHP_EOL;
echo PHP_EOL.PHP_EOL;

將文件保存為test.php,然后php test.php執行,結果如下圖所示:

總結一下:

  1. jsond確實是要比json快一些的
  2. 總有刁民張嘴就來json要比serialize()快
  3. serialize()數據體積確實大(因為還保留了數據類型說明)
  4. msgpack最佳???不知道昂,你們自己感受

您可能感興趣的文章:
  • PHP 序列化和反序列化函數實例詳解
  • 解析PHP多種序列化與反序列化的方法
  • php json與xml序列化/反序列化
  • php 中序列化和json使用介紹
  • 詳解PHP序列化和反序列化原理
  • php中序列化與反序列化詳解
  • PHP中的串行化變量和序列化對象
  • PHP多種序列化/反序列化的方法詳解

標簽:溫州 安康 紹興 清遠 金華 呼倫貝爾 綏化 萊蕪

巨人網絡通訊聲明:本文標題《PHP序列化的四種實現方法與橫向對比》,本文關鍵詞  PHP,序列化,的,四種,實現,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP序列化的四種實現方法與橫向對比》相關的同類信息!
  • 本頁收集關于PHP序列化的四種實現方法與橫向對比的相關信息資訊供網民參考!
  • 推薦文章
    国产精品自拍亚洲| 欧美激情一区二区三区视频| 黄视频网站在线看| 99久久视频| 欧美一区二区三区在线观看| 99色播| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 日日爽天天| 天天色成人| 日韩字幕在线| 一级女性全黄久久生活片| 欧美α片无限看在线观看免费| 黄视频网站免费看| 国产伦精品一区二区三区无广告| 国产网站免费视频| 亚洲爆爽| 国产伦久视频免费观看视频| 夜夜操网| 国产国语对白一级毛片| 九九久久99| 欧美18性精品| 欧美大片a一级毛片视频| 国产伦精品一区二区三区在线观看 | 999精品影视在线观看| 日本特黄一级| 日韩专区一区| 国产欧美精品午夜在线播放| 久久国产影视免费精品| 欧美日本免费| 九九久久国产精品| 精品毛片视频| 亚洲精品久久玖玖玖玖| 91麻豆爱豆果冻天美星空| 免费一级片在线| 亚洲第一页色| 精品国产三级a| 黄视频网站免费看| 久久99中文字幕| 99色视频在线观看| 午夜久久网| 毛片的网站| 欧美a级v片不卡在线观看| 久久久久久久免费视频| 99久久精品国产免费| 国产国语在线播放视频| 午夜激情视频在线播放| 韩国三级一区| 欧美一区二区三区在线观看| 99久久精品国产高清一区二区| 成人免费网站久久久| 成人高清免费| 国产麻豆精品免费视频| 国产高清在线精品一区a| 亚洲精品久久玖玖玖玖| 精品国产一区二区三区久久久狼| 一级毛片视频在线观看| 99久久精品国产麻豆| 亚洲精品影院久久久久久| 国产成人女人在线视频观看| 亚洲女人国产香蕉久久精品| 国产一区二区精品久| 精品视频在线看| 午夜家庭影院| 久久精品大片| 精品视频免费观看| 久久99青青久久99久久| 999久久66久6只有精品| 999久久66久6只有精品| 国产原创中文字幕| 91麻豆精品国产片在线观看| 久久99这里只有精品国产| 尤物视频网站在线观看| 精品视频在线观看一区二区| 亚洲精品久久久中文字| 精品久久久久久综合网| 国产成人啪精品视频免费软件| 精品国产亚洲一区二区三区| 欧美一级视频免费观看| 国产一区二区精品久| 久久99这里只有精品国产| 毛片的网站| 尤物视频网站在线| 日本免费区| 九九久久99| 四虎影视久久久| 在线观看导航| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 日日夜夜婷婷| 天天色成人网| 国产一区免费在线观看| 精品在线观看国产| 欧美国产日韩在线| 国产网站免费在线观看| 日韩在线观看视频免费| 久久精品大片| 国产麻豆精品| 亚洲第一色在线| 国产一区精品| 国产一区二区福利久久| 四虎影视久久久| 欧美一区二区三区性| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 香蕉视频亚洲一级| 午夜激情视频在线观看| 久久99中文字幕| 香蕉视频一级| 欧美一级视| 一级女性全黄生活片免费| a级黄色毛片免费播放视频| 九九九网站| 日韩在线观看视频免费| 亚洲 激情| 999久久狠狠免费精品| 国产a毛片| 免费国产在线观看不卡| 国产一区免费观看| 人人干人人插| 欧美大片aaaa一级毛片| 国产精品免费久久| 黄视频网站免费观看| 黄视频网站在线观看| 色综合久久久久综合体桃花网| 免费国产在线观看不卡| 韩国毛片基地| 韩国三级视频网站| 国产成a人片在线观看视频| 沈樵在线观看福利| 深夜做爰性大片中文| 国产不卡福利| 国产不卡精品一区二区三区| 亚洲第一页色| 国产不卡精品一区二区三区| 高清一级做a爱过程不卡视频| 欧美一级视| 国产成人啪精品视频免费软件| 久草免费在线色站| 国产91丝袜在线播放0| 精品久久久久久综合网| 午夜家庭影院| 国产伦精品一区三区视频| 欧美激情一区二区三区在线播放| 亚洲第一色在线| 亚洲不卡一区二区三区在线| 日韩女人做爰大片| 色综合久久天天综合观看| 午夜在线影院| 久久99爰这里有精品国产| 精品视频一区二区三区免费| 欧美日本免费| 91麻豆tv| 黄视频网站在线观看| 欧美日本免费| 日韩在线观看免费| 国产麻豆精品免费视频| 91麻豆精品国产自产在线| 欧美大片aaaa一级毛片| 国产伦精品一区二区三区无广告 | 国产一区二区福利久久| 韩国毛片免费大片| 一级毛片视频播放| 一级毛片视频免费| 亚洲精品影院久久久久久| 国产不卡福利| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产成a人片在线观看视频| 久久成人综合网| 一级片片| 亚洲精品影院一区二区| 亚欧乱色一区二区三区| 可以在线看黄的网站| 欧美一级视频高清片| 91麻豆精品国产自产在线 | 国产一区二区精品久久| 国产伦精品一区二区三区无广告| a级毛片免费观看网站| 国产国语在线播放视频| 欧美另类videosbestsex久久 | 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 美女免费毛片| 精品视频在线观看免费| 国产亚洲免费观看| 欧美一级视频免费观看| 精品国产一级毛片| 国产亚洲精品成人a在线| 色综合久久天天综线观看| 毛片高清| 久久成人性色生活片| 精品国产亚洲一区二区三区| 国产不卡在线观看视频| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 午夜在线亚洲| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 亚洲精品影院| 欧美一级视频高清片| 国产精品1024永久免费视频| 久久99爰这里有精品国产| 欧美另类videosbestsex高清| 国产原创视频在线| 精品国产一区二区三区免费 |