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