闡述建立JavaScript對(duì)象的使用及相關(guān)技巧
串行化后的字符串如果被反串行化的變量是為了建立JavaScript對(duì)象,則成功恢復(fù)該對(duì)象的結(jié)構(gòu)后,PHP將自動(dòng)嘗試執(zhí)行該對(duì)象的__wakeup()成員函數(shù)(如果其存在),屏蔽這個(gè)特性只需將其設(shè)為空即可。
在這個(gè)傳輸過程中,我們知道,實(shí)際上只能夠傳遞字符流,字符流是一維(扁平)的,然而很多對(duì)象卻是多維的,如果要傳遞的對(duì)象是一個(gè)字符串,那么很簡(jiǎn)單,我們直接將其作為傳遞的內(nèi)容就可以了,如果要傳遞的對(duì)象是一個(gè)數(shù)組或者其他的結(jié)構(gòu)呢,我們就需要用字符流來描述他,就比如在電話里面,我問你的名字是什么。
你會(huì)告訴我,你的名字是張三、李四,而我問你,你的長(zhǎng)相如何呢,你就需要用文字向我描述了,我們進(jìn)行數(shù)據(jù)傳遞的媒介往往和這條電話線路一樣,只能傳遞字符流,而我們描述對(duì)象的過程,實(shí)際上就是串行化的過程。#t#
另外,串行化也可以用于對(duì)對(duì)象的持久化存儲(chǔ),也許你曾經(jīng)也和我一樣,想著在數(shù)據(jù)庫的某一個(gè)字段中存儲(chǔ)一個(gè)對(duì)象,現(xiàn)在我們可以非常簡(jiǎn)單的做到這一點(diǎn),并且,你的這個(gè)數(shù)據(jù)庫字段不需要設(shè)定為特殊格式,設(shè)定為varchar就可以了(當(dāng)然,如果對(duì)象很大,你可能需要設(shè)定為text)。
好了,我想What和Why的問題你都了解了,本節(jié)最后我們來講點(diǎn)理論性強(qiáng)一些的內(nèi)容,就是如何使用PHP串行化和反串行化數(shù)據(jù),如何將JavaS
PHP為我們提供了兩個(gè)函數(shù),用來進(jìn)行串行化和反串行化的操作,這兩個(gè)函數(shù)分別是:serialize()和unserialize(),他們適用于PHP4和PHP5,下面分別進(jìn)行講解:
serialize()
(PHP 4, PHP 5, PECL axis2:0.1.0-0.1.1)serialize — 獲得一個(gè)可存儲(chǔ)的表述值
說明
string serialize ( mixed $value )獲得一個(gè)可存儲(chǔ)的表述值本函數(shù)用于無損的存儲(chǔ)或者傳遞PHP變量值和結(jié)構(gòu)。如果需要將已經(jīng)串行化的值轉(zhuǎn)回PHP變量,可以使用unserialize()函數(shù)。
參數(shù)
即被串行化的表達(dá)式。serialize()處理除資源指針之外的所有類型,你甚至可以將含有指向自身元素的數(shù)組串行化。你串行化的含有循環(huán)指向的數(shù)組或者對(duì)象一樣會(huì)被存儲(chǔ),其他的指向則會(huì)丟失。
當(dāng)串行化對(duì)象時(shí),PHP會(huì)嘗試首先調(diào)用其成員函數(shù)__sleep()。這將允許對(duì)象在被串行化之前進(jìn)行諸如最后的清理工作等。同樣地,當(dāng)使用unserialize()函數(shù)將對(duì)象恢復(fù)時(shí),會(huì)調(diào)用成員建立JavaScript對(duì)象返回值返回一個(gè)可以被存儲(chǔ)在任何地點(diǎn)的包含對(duì)象的字節(jié)流表達(dá)式的字符串。