php函數:序列化函數——serialize()與反序列化函數——unserialize()說明及案例。
serialize()返回字符串,此字符串包含了表示value的字節流,能夠存儲於任何地方。這有利於存儲或傳遞 PHP 的值,同時不丟失其類型和結構。php
想要將已序列化的字符串變回 PHP 的值,可以使用unserialize()。serialize()可處理除了resource以外的任何類型。甚至能夠serialize()那些包含了 指向其自身引用的數組。你正serialize()的數組/對象中的引用也將被存儲。web
當序列化對象時,PHP 將試圖在序列動做以前調用該對象的成員函數__sleep()。這樣就容許對象在被序列化以前作任何清除操做。相似的,當使用unserialize()恢復對象時, 將調用__wakeup()成員函數。數據庫
serialize()和unserialize()在php手冊上的解釋是:
serialize — Generates a storable representation of a value
serialize — 產生一個可存儲的值的表示
unserialize — Creates a PHP value from a stored representation
unserialize — 從已存儲的表示中建立 PHP 的值
serialize,翻譯過來叫「連載, 使連續」,一般稱它爲「序列化」
這個函數很好用,特別是和unserialize一塊兒配合使用數組
我以爲比較有用的地方就是將數據存入數據庫或記錄在文件中的時候
固然這種數據必須是比較複雜的(不復雜也不須要serialize了,我以爲起碼得是一個一數組),並且是數據庫中的非「索引或主鍵」,固然最好這 個數據庫字段在系統中和任何搜索程序無關,固然serialize後的數據其實仍是可以搜索的,由於具體的數據並無被加密或改變cookie
<?php //簡單一點的 $array = array(); $array['key'] = 'website'; $array['value']='www.isoji.org'; $a = serialize($array); echo $a; unset($array); $a = unserialize($a); print_r($a); //聲明一個類 class dog { var $name; var $age; var $owner; function dog($in_name="unnamed",$in_age="0",$in_owner="unknown") { $this->name = $in_name; $this->age = $in_age; $this->owner = $in_owner; } function getage() { return ($this->age * 365); } function getowner() { return ($this->owner); } function getname() { return ($this->name); } } //實例化這個類 $ourfirstdog = new dog("Rover",12,"Lisa and Graham"); //用serialize 函數將這個實例轉化爲一個序列化的字符串 $dogdisc = serialize($ourfirstdog); print $dogdisc; //$ourfirstdog 已經序列化爲字符串 O:3:"dog":3:{s:4:"name";s:5:"Rover";s:3:"age";i:12;s:5:"owner";s:15:"Lisa and Graham";} print '<BR>'; /* ----------------------------------------------------------------------------------------- 在這裏你能夠將字符串 $dogdisc 存儲到任何地方如 session,cookie,數據庫,php文件 ----------------------------------------------------------------------------------------- */ //咱們在此註銷這個類 unset($ourfirstdog); /* 還原操做 */ /* ----------------------------------------------------------------------------------------- 在這裏將字符串 $dogdisc 從你存儲的地方讀出來如 session,cookie,數據庫,php文件 ----------------------------------------------------------------------------------------- */ //咱們在這裏用 unserialize() 還原已經序列化的對象 $pet = unserialize($dogdisc); //此時的 $pet 已是前面的 $ourfirstdog 對象了 //得到年齡和名字屬性 $old = $pet->getage(); $name = $pet->getname(); //這個類此時無需實例化能夠繼續使用,並且屬性和值都是保持在序列化以前的狀態 print "Our first dog is called $name and is $old days old<br>"; print '<BR>'; ?>