婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 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序列化的四種實現方法與橫向對比的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    久久av资源网| 91精品综合久久久久久| 九色|91porny| 日韩不卡手机在线v区| 亚洲成人免费视| 亚洲成人福利片| 日韩影院免费视频| 捆绑变态av一区二区三区| 国产又粗又猛又爽又黄91精品| 青娱乐精品视频在线| 久久成人av少妇免费| 国产精品77777| 99免费精品在线观看| 欧洲国产伦久久久久久久| 在线精品视频免费观看| 欧美一区二区三区在线视频 | 欧美午夜视频网站| 色噜噜久久综合| 欧美日韩国产系列| 久久五月婷婷丁香社区| 日韩美女啊v在线免费观看| 一区二区三区欧美日| 日韩国产在线观看| 国产成人av资源| 欧美色视频在线| 精品区一区二区| 亚洲欧美偷拍卡通变态| 天天综合网天天综合色| 极品销魂美女一区二区三区| 成人一区二区视频| 欧美乱熟臀69xxxxxx| 久久久久久久免费视频了| 亚洲色图欧美偷拍| 久久99久久久欧美国产| 91在线视频网址| 日韩欧美国产电影| 亚洲一区二区三区免费视频| 国产一区二区三区不卡在线观看| 91亚洲男人天堂| 日韩天堂在线观看| 亚洲激情图片小说视频| 国产乱一区二区| 欧美喷潮久久久xxxxx| 国产精品美女视频| 久久精品国产精品亚洲红杏| av日韩在线网站| 久久久精品综合| 不卡一卡二卡三乱码免费网站| 欧美日韩一区小说| 日本一区二区视频在线观看| 日本麻豆一区二区三区视频| 色噜噜狠狠成人中文综合| 久久新电视剧免费观看| 午夜久久电影网| 91国模大尺度私拍在线视频| 中文在线资源观看网站视频免费不卡| 秋霞电影网一区二区| 欧美亚洲国产怡红院影院| 中文字幕 久热精品 视频在线| 激情伊人五月天久久综合| 欧美网站大全在线观看| 亚洲丝袜美腿综合| 成人中文字幕电影| 久久久久久久电影| 另类综合日韩欧美亚洲| 日韩色视频在线观看| 日本欧美在线看| 欧美精品v日韩精品v韩国精品v| 亚洲午夜久久久久| 91福利在线导航| 亚洲精品免费电影| 在线一区二区三区四区五区| 亚洲男女毛片无遮挡| 成人av片在线观看| ...xxx性欧美| 日本乱码高清不卡字幕| 亚洲激情男女视频| 色婷婷久久综合| 午夜精品在线看| 日韩精品在线网站| 国产精品99久久久久久似苏梦涵 | 亚洲mv在线观看| 亚洲免费成人av| 欧美影院精品一区| 日本在线观看不卡视频| 精品国产亚洲在线| 国产成人日日夜夜| 亚洲图片另类小说| 欧美日韩国产首页在线观看| 日韩av高清在线观看| 久久欧美中文字幕| 成人a级免费电影| 亚洲一区二区三区影院| 91精品福利在线一区二区三区| 奇米色777欧美一区二区| 亚洲精品一区二区三区福利| www.欧美日韩| 午夜免费久久看| 日韩欧美色综合网站| caoporm超碰国产精品| 亚洲一区中文日韩| 日韩欧美一区二区不卡| 国产成人精品一区二区三区四区| 成人欧美一区二区三区1314| 欧美一区日韩一区| 99国产精品国产精品毛片| 午夜伦理一区二区| 国产精品久久久久久亚洲毛片| 欧美色手机在线观看| 国产精品一区在线观看乱码| 亚洲一区二区三区视频在线| 国产亚洲一二三区| 欧美高清激情brazzers| 国精产品一区一区三区mba视频| 中文字幕一区二区在线播放| 亚洲精品视频在线| 免费观看在线综合色| 欧美精品三级在线观看| 欧美日韩免费一区二区三区| 国产精品久久久一区麻豆最新章节| 亚洲福利视频三区| 在线精品观看国产| 亚洲视频你懂的| 久久精品国产精品亚洲综合| 欧美日韩国产免费一区二区| 中文字幕av一区二区三区| 裸体歌舞表演一区二区| 宅男在线国产精品| 日本欧美一区二区| 日本在线不卡视频| 亚洲男人的天堂网| 中文字幕欧美日韩一区| 亚洲精品一区二区三区香蕉| 欧美美女一区二区在线观看| 91免费观看国产| 97se狠狠狠综合亚洲狠狠| 国产91精品一区二区麻豆亚洲| 日本最新不卡在线| 亚洲第一激情av| 亚洲综合色在线| 依依成人精品视频| 亚洲精品久久7777| 亚洲免费毛片网站| 一区二区三区四区在线播放 | 久久久久久久久久久久久久久99 | 国产精品一区专区| 国产一区二区三区国产| 国产在线国偷精品免费看| 蜜桃视频一区二区三区在线观看| 亚洲成av人片在线| 天使萌一区二区三区免费观看| 亚洲成人免费av| 五月天欧美精品| 蜜桃视频第一区免费观看| 久久99久久99精品免视看婷婷 | 国产校园另类小说区| 国产欧美日韩另类视频免费观看| 久久综合色8888| 国产精品天干天干在观线| 国产精品久久久久aaaa| 亚洲精品一二三| 日韩精品视频网| 精品亚洲成a人| 成人精品高清在线| 欧美在线你懂得| 日韩视频一区二区在线观看| 2017欧美狠狠色| 日韩理论在线观看| 天天操天天干天天综合网| 久久99精品一区二区三区三区| 国产夫妻精品视频| 91黄色小视频| 精品成人一区二区| 久久综合国产精品| 亚洲乱码中文字幕| 五月激情综合网| 国产一区在线精品| 国产激情一区二区三区桃花岛亚洲| 美女国产一区二区三区| 香蕉av福利精品导航| 午夜精品免费在线| 一区二区高清视频在线观看| 自拍偷拍亚洲综合| 偷拍日韩校园综合在线| 亚洲自拍另类综合| 五月综合激情婷婷六月色窝| 亚洲综合无码一区二区| 在线一区二区三区做爰视频网站| 8v天堂国产在线一区二区| 中文字幕精品一区| 日本成人在线网站| voyeur盗摄精品| 日韩欧美的一区| 亚洲精品国产品国语在线app| 另类人妖一区二区av| 在线观看亚洲精品| 国产精品久久国产精麻豆99网站| 视频一区二区不卡| 欧美综合在线视频| 亚洲三级在线播放|