婷婷综合国产,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
    亚洲激情在线激情| 欧美tickling挠脚心丨vk| 欧美午夜影院一区| 亚洲国产激情av| 蜜桃视频一区二区三区| 日本午夜精品视频在线观看 | 国产精品一区二区黑丝| 欧美亚洲国产怡红院影院| 国产精品国产三级国产普通话蜜臀| 秋霞午夜鲁丝一区二区老狼| 在线看国产日韩| 亚洲精品国产高清久久伦理二区| 成人av在线一区二区| 久久青草欧美一区二区三区| 丝袜亚洲另类丝袜在线| 91精品啪在线观看国产60岁| 午夜婷婷国产麻豆精品| 国产精品911| 欧美成人a视频| 麻豆精品国产传媒mv男同| 91精品国产入口| 全部av―极品视觉盛宴亚洲| 日韩午夜电影在线观看| 日韩主播视频在线| 精品欧美乱码久久久久久| 美女视频一区二区| 国产日本欧洲亚洲| 国产馆精品极品| 亚洲精品一区二区在线观看| 国内精品写真在线观看| 精品成人在线观看| 国产成人福利片| 亚洲欧美日韩国产一区二区三区| 在线观看日韩国产| 日韩国产精品久久| 久久久国产精品麻豆| 成人黄色小视频| 亚洲一区二区三区四区在线| 欧美精品色一区二区三区| 国模无码大尺度一区二区三区| 中文字幕乱码久久午夜不卡 | 伊人婷婷欧美激情| 欧美日本免费一区二区三区| 另类小说视频一区二区| 中文字幕中文字幕在线一区| 欧美日韩国产中文| 国产精品影音先锋| 一区二区在线观看av| 欧美一级高清片| a美女胸又www黄视频久久| 亚洲v日本v欧美v久久精品| 久久综合色之久久综合| 欧美专区日韩专区| 国产一区二区三区香蕉| 一区二区在线观看免费视频播放| 精品久久国产老人久久综合| 99热在这里有精品免费| 日本午夜精品视频在线观看| 中文字幕精品在线不卡| 欧美日韩成人在线| 国产成人精品一区二| 亚洲自拍都市欧美小说| 久久久久久9999| 欧美日韩视频不卡| 粉嫩嫩av羞羞动漫久久久| 日韩激情视频在线观看| 中文字幕一区二区三区视频| 欧美一级xxx| 日本高清不卡aⅴ免费网站| 激情久久五月天| 亚洲精品日产精品乱码不卡| 久久久久久一级片| 欧美伦理视频网站| 91丨porny丨最新| 国产成a人亚洲精品| 日本成人在线一区| 亚洲国产乱码最新视频 | 欧美中文字幕不卡| 国产精品自在欧美一区| 天天综合天天做天天综合| 亚洲日本va在线观看| 久久久久国产精品免费免费搜索| 69av一区二区三区| 欧美日韩一区成人| 99视频精品免费视频| 国产成人精品网址| 国产自产视频一区二区三区| 秋霞午夜av一区二区三区| 亚洲国产精品欧美一二99| 亚洲精品日产精品乱码不卡| 成人免费在线观看入口| 欧美激情一区二区三区蜜桃视频| 精品国产青草久久久久福利| 日韩欧美一区二区视频| 91麻豆精品国产91久久久久久| 欧美专区亚洲专区| 欧美视频中文字幕| 欧美视频一区二区三区在线观看 | 国产精品1区二区.| 国内一区二区视频| 韩国女主播一区二区三区| 久久精品免费看| 美女www一区二区| 日韩av一区二| 日韩精品电影在线| 青娱乐精品视频| 另类的小说在线视频另类成人小视频在线| 视频在线观看一区二区三区| 日韩精品欧美精品| 麻豆freexxxx性91精品| 国精产品一区一区三区mba视频| 久久国产人妖系列| 久久成人av少妇免费| 国产综合久久久久久鬼色| 国产成人在线网站| av中文字幕一区| 在线一区二区视频| 欧美日韩国产乱码电影| 在线综合+亚洲+欧美中文字幕| 欧美日韩精品一区视频| 91精品国产麻豆| 久久久久久久av麻豆果冻| 中文一区二区在线观看| 最新久久zyz资源站| 亚洲一卡二卡三卡四卡| 日韩黄色一级片| 国产精品综合一区二区| a4yy欧美一区二区三区| 欧美性大战久久久久久久| 欧美久久一区二区| 久久亚洲一级片| 日韩美女久久久| 无码av中文一区二区三区桃花岛| 免费精品99久久国产综合精品| 国内精品自线一区二区三区视频| 国产成人精品免费在线| 色噜噜狠狠色综合中国| 欧美精选在线播放| 日韩欧美一卡二卡| 国产精品入口麻豆原神| 一区二区三区加勒比av| 久久电影网电视剧免费观看| 风间由美性色一区二区三区| 欧洲精品在线观看| 久久日一线二线三线suv| 亚洲男人的天堂av| 蜜臀va亚洲va欧美va天堂| 岛国av在线一区| 91精品国产欧美日韩| 亚洲欧洲精品一区二区三区不卡| 三级欧美在线一区| 粉嫩av一区二区三区| 欧美日韩aaa| 成人欧美一区二区三区| 裸体健美xxxx欧美裸体表演| 成人黄页在线观看| 欧美一区二区国产| 亚洲欧洲国产日本综合| 美女视频黄 久久| 色综合视频在线观看| 精品国产凹凸成av人导航| 亚洲欧美一区二区久久| 黄色精品一二区| 欧美日韩高清不卡| 综合中文字幕亚洲| 国产福利一区在线| 在线不卡免费欧美| 国产精品久久久久婷婷二区次| 美女一区二区三区| 91久久国产最好的精华液| 精品久久久久久久久久久院品网 | 色婷婷久久一区二区三区麻豆| 欧美成人bangbros| 亚洲一二三级电影| 国产福利电影一区二区三区| 777亚洲妇女| 亚洲美女偷拍久久| 国产91精品在线观看| 91精品国产入口| 一个色在线综合| 成人免费精品视频| 久久久激情视频| 蜜桃精品视频在线观看| 欧美日韩激情一区| 亚洲免费资源在线播放| 成人免费va视频| 精品国产乱码久久久久久牛牛| 一区二区三区国产精华| 99久久精品国产麻豆演员表| 欧美精品一区男女天堂| 人禽交欧美网站| 亚洲欧美日韩小说| 国产91对白在线观看九色| 欧美午夜精品免费| 亚洲综合丁香婷婷六月香| 色综合天天天天做夜夜夜夜做| 欧美一区二区三区在线观看| 亚洲一二三四在线观看| 欧美性videosxxxxx| 亚洲大片精品永久免费|