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