php serialize與unserialize語法
serialize --------- 將數(shù)組格式化成有序的字符串
unserialize
unserialize -- 從已存儲(chǔ)的表示中創(chuàng)建 php 的值
描述
mixed unserialize ( string str [, string callback])
unserialize() 對(duì)單一的已序列化的變量進(jìn)行操作,將其轉(zhuǎn)換回 php 的值。返回的是轉(zhuǎn)換之后的值,可為 integer、float、string、array 或 object。如果傳遞的字符串不可解序列化,則返回 false。
unserialize_callback_func 指令: 如果在解序列化的時(shí)候需要實(shí)例化一個(gè)未定義類,則可以設(shè)置回調(diào)函數(shù)以供調(diào)用(以免得到的是不完整的 object “__php_incomplete_class”)。可通過 php.ini、ini_set() 或 .htaccess 定義‘unserialize_callback_func’。每次實(shí)例化一個(gè)未定義類時(shí)它都會(huì)被調(diào)用。若要禁止這個(gè)特性,只需置空此設(shè)定。還需要注意的是 unserialize_callback_func 指令是從 php 4.2.0 開始提供使用的
unserialize ----- 將數(shù)組還原成數(shù)組
serialize
(php 3>= 3.0.5, php 4 )
serialize -- 產(chǎn)生一個(gè)可存儲(chǔ)的值的表示
描述
string serialize ( mixed value)
serialize() 返回字符串,此字符串包含了表示 value 的字節(jié)流,可以存儲(chǔ)于任何地方。
這有利于存儲(chǔ)或傳遞 php 的值,同時(shí)不丟失其類型和結(jié)構(gòu)。
想要將已序列化的字符串變回 php 的值,可使用 unserialize(),serialize() 可處理除了 resource 之外的任何類型,甚至可以 serialize() 那些包含了指向其自身引用的數(shù)組,你正 serialize() 的數(shù)組/對(duì)象中的引用也將被存儲(chǔ).
當(dāng)序列化對(duì)象時(shí),php 將試圖在序列動(dòng)作之前調(diào)用該對(duì)象的成員函數(shù) __sleep()。這樣就允許對(duì)象在被序列化之前做任何清除操作,類似的,當(dāng)使用 unserialize() 恢復(fù)對(duì)象時(shí),將調(diào)用 __wakeup() 成員函數(shù).
注:在 php 3 中,對(duì)象屬性將被序列化,但是方法則會(huì)丟失,php 4 打破了此限制,可以同時(shí)存儲(chǔ)屬性和方法,請(qǐng)參見類與對(duì)象中的序列化對(duì)象部分獲取更多信息.
測試實(shí)例:
- $test = array("a"=>0,"b"=>0,"c"=>0);
- $test2 = '';
- $test2=serialize($test);
- echo $test2;
- echo "<hr>";
- print_r(unserialize($test2));
用途:
在我個(gè)人經(jīng)驗(yàn)主要是處理數(shù)組傳遞,數(shù)組存庫操作。
例如我有一個(gè)數(shù)組需要傳遞給下一個(gè)頁面,如果你不想使用seesion/cookie,那么你就可以利用該函數(shù),傳遞,然后還原.
例如我在做網(wǎng)址目錄的時(shí)候,其中有個(gè) 評(píng)分,分為好評(píng),中評(píng),差評(píng),那么我的數(shù)據(jù)庫給該功能設(shè)計(jì)的字段就一個(gè),類型是長字符型,將三個(gè)評(píng)論組合成數(shù)組:
- array(
- 'a' => 0, //好評(píng)0個(gè)
- 'b' => 0, //中評(píng)0個(gè)
- 'c' => 0 //差評(píng)0個(gè)
- )
將其用serialize函數(shù)轉(zhuǎn)換后就是:a:3:{s:1:"a";i:0;s:1:"b";i:0;s:1:"c";i:0;},然后存在數(shù)據(jù)庫,取出的時(shí)候別忘記用.
新聞熱點(diǎn)
疑難解答