當前位置:首頁 » 編程語言 » php序列化

php序列化

發布時間: 2022-01-23 03:57:07

1. php 什麼是序列化

string serialize ( mixed value )

serialize() 返回字元串,此字元串包含了表示 value 的位元組流,可以存儲於任何地方。

這有利於存儲或傳遞 PHP 的值,同時不丟失其類型和結構。

想要將已序列化的字元串變回 PHP 的值,可使用 unserialize()。serialize() 可處理除了 resource 之外的任何類型。甚至可以 serialize() 那些包含了指向其自身引用的數組。你正 serialize() 的數組/對象中的引用也將被存儲。

當序列化對象時,PHP 將試圖在序列動作之前調用該對象的成員函數 __sleep()。這樣就允許對象在被序列化之前做任何清除操作。類似的,當使用 unserialize() 恢復對象時, 將調用 __wakeup() 成員函數。

注: 在 PHP 3 中,對象屬性將被序列化,但是方法則會丟失。PHP 4 打破了此限制,可以同時存儲屬性和方法。請參見類與對象中的序列化對象部分獲取更多信息。

例子 1. serialize() 示例

<?php
// $session_data 是包含了當前用戶 session 信息的多維數組。
// 我們使用 serialize() 在請求結束之前將其存儲到資料庫中。

$conn = odbc_connect ("webdb", "php", "chicken");
$stmt = odbc_prepare ($conn,
"UPDATE sessions SET data = ? WHERE id = ?");
$sqldata = array (serialize($session_data), $PHP_AUTH_USER);
if (!odbc_execute ($stmt, &$sqldata)) {
$stmt = odbc_prepare($conn,
"INSERT INTO sessions (id, data) VALUES(?, ?)");
if (!odbc_execute($stmt, &$sqldata)) {
/* 出錯 */
}
}
?>

2. php的序列化和反序列化有什麼好處

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

PHP中的序列化和反序列化分別通過函數serialize()和unserialize()即可實現。serialize()的參數可以是resource類型外的所有變數類型,最常見的是用來序列化對象,unseialize()將serialize的返回結果作為參數,進行反序列化,得到原對象。

在PHP中,序列化和反序列化很多地方都可以用到!~

例如:資料庫連接,序列化數組等等。

3. PHP序列化數據存儲在資料庫中使用json還是serialize好

1) 空間的比較
serialize在編碼後大概是json的1.5倍。
原因:
serialize後字元串包含了子串的長度,這可能是速度方面的優化,但是測試結果不盡人意。
serialize有更加詳細的類型區分,而json只有四種類型,並且是以簡單的符號表示。

2)速度的比較
在較小數據的情況下, serialize比json快數量級。
在大數據量的情況下,json比serialize稍微差一點

3)處理對象
json無法處理對象方法等數據。

4)使用范圍
在前後端交互一般都使用JSON,另外,目前JSON只支持UTF-8編碼的數據。
序列化使用serialize,特別是對象的存儲。這是其存在的意義。
與對象無關的數據存儲可以使用json,如包含大量數字的數組等。

這篇博客概括滿全面:http://blog.csdn.net/hguisu/article/details/7651730

4. PHP中序列化有什麼用處

你想如果想把一個數組或者是對象存儲到文件或資料庫中,怎麼辦。不能像字元串那樣的存儲吧。所以在存儲數組或對象之前先serialize,在取回內容時再unserialize...
一句話:serialize的作用是 產生一個可存儲的值的表示.unserialize的作用是 對單一的已序列化的變數進行操作,將其轉換回 PHP 的值。
更多問題可以去php中文網問答社區提問http://www.php.cn/wenda.html,大神在線幫你解決,希望對你有幫助

5. php 數組序列化

mixed unserialize ( string str [, string callback] )

unserialize() 對單一的已序列化的變數進行操作,將其轉換回 PHP 的值。返回的是轉換之後的值,可為 integer、float、string、array 或 object。如果傳遞的字元串不可解序列化,則返回 FALSE。

unserialize_callback_func 指令: 如果在解序列化的時候需要實例化一個未定義類,則可以設置回調函數以供調用(以免得到的是不完整的 object 「__PHP_Incomplete_Class」)。可通過 php.ini、ini_set() 或 .htaccess 定義『unserialize_callback_func』。每次實例化一個未定義類時它都會被調用。若要禁止這個特性,只需置空此設定。還需要注意的是 unserialize_callback_func 指令是從 PHP 4.2.0 開始提供使用的。

若被解序列化的變數是一個對象,在成功地重新構造對象之後,PHP 會自動地試圖去調用 __wakeup() 成員函數(如果存在的話)。 例子 1. unserialize_callback_func 示例

<?php
$serialized_object='O:1:"a":1:{s:5:"value";s:3:"100";}';

// unserialize_callback_func 從 PHP 4.2.0 起可用
ini_set('unserialize_callback_func','mycallback'); // 設置您的回調函數

function mycallback($classname) {
// 只需包含含有類定義的文件
// $classname 指出需要的是哪一個類
}
?>

<?php
// 這里,我們使用 unserialize() 裝載來自資料庫的 $session_data 數組中的會話數據。
// 此例是描述 serialize() 的那個例子的補充。

$conn = odbc_connect ("webdb", "php", "chicken");
$stmt = odbc_prepare ($conn, "SELECT data FROM sessions WHERE id = ?");
$sqldata = array ($PHP_AUTH_USER);
if (!odbc_execute ($stmt, &$sqldata) || !odbc_fetch_into ($stmt, &$tmp)) {
// 如果執行出錯或返回錯誤,則初始化為空數組
$session_data = array();
} else {
// 現在我們需要的是 $tmp[0] 中已序列化的數據。
$session_data = unserialize ($tmp[0]);
if (!is_array ($session_data)) {
// 出錯,初始化為空數組
$session_data = array();
}
}
?>

6. php數組序列化a:1:{i:0;s:1:"1"} 的詳細解釋

1、首先創建好一個數組然後序列化,array("table" => member, "field" => 1,"rule" => -0 ,"cycle" => 24 ,"max" => 1 )。

7. 到底什麼是PHP序列化

在PHP中,序列化用於存儲或傳遞 PHP 的值的過程中,同時不丟失其類型和結構。本文講述PHP序列化的四種方案,感興趣的可以了解一下


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


1、什麼是PHP序列化——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 ''


;


//反序列化$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、什麼是PHP序列化——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 '


;


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


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


3、什麼是PHP序列化——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 '


';


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


print_r($my_var);


4、什麼是PHP序列化——wddx_serialize_value 和 wddx deserialize


wddx_serialize_value函數可以序列化數組變數,並以XML字元串形式輸出。


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


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


//輸出結果(查看輸出字元串的源碼): ApplebananaCoconut


echo '


';


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


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


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


結論


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


本篇《什麼是PHP序列化?這個知識點才是你應該了解到的用》到這里就已經結束了,小編一直認為,某一個編程軟體受歡迎是有一定原因的,首先吸引人的一定是其功能,環球網校的小編祝您PHP學習之路順利,如果你還想知道更多php知識,也可以點擊本站的其他文章進行學習。

8. php的序列化可以直接傳給c 的語言程序用嗎php不也是c做出來的嗎

你希望怎麼傳,怎麼用?你說的直接傳是什麼意思?
這個跟語言其實沒什麼關系。序列化之後的串可以是文本的也可以是二進制,你把它傳遞給另一個程序,那個程序要怎麼用才是關鍵。如果你希望解析這個串,那就要目標程序有解析這個串的功能。

具體到php,如果你使用php原生的序列化,那麼就是得到一個字元串,這個字元串傳給一個C程序很容易,C程序解析這個串也不難,關鍵是你希望C程序中怎麼用這個串?

9. PHP中序列化有什麼用處

序列化可以將PHP中 對象、類、數組、變數、匿名函數等,轉化為字元串,這樣用戶就方便儲存和傳輸,對伺服器或web中減輕一定的壓力。

10. php序列化成字元串,能否在js頁面解開成原來的數據類型

不行,一般都用json格式,json_encode函數

熱點內容
微信如何評論圖片安卓 發布:2024-11-14 11:56:34 瀏覽:848
游戲遍地腳本 發布:2024-11-14 11:56:32 瀏覽:760
怎樣編譯一個背單詞系統 發布:2024-11-14 11:54:47 瀏覽:177
傳奇這個配置怎麼樣 發布:2024-11-14 11:48:25 瀏覽:376
配置橫向防火牆是什麼意思 發布:2024-11-14 11:42:34 瀏覽:731
手機緩存文件能打開嗎 發布:2024-11-14 11:41:00 瀏覽:492
存儲系統集成 發布:2024-11-14 11:14:54 瀏覽:584
雲伺服器搭建方法圖解 發布:2024-11-14 11:14:53 瀏覽:309
挑戰伺服器吃雞是什麼 發布:2024-11-14 10:59:07 瀏覽:932
自繳社保演算法 發布:2024-11-14 10:43:53 瀏覽:554