手冊裡面的原話和一些總結:
php函數serialize()與unserialize()說明及案例。想要將已序列化的字符串變回 PHP 的值,可使用unserialize()。serialize()可處理除了resource之外的任何類型。甚至可以serialize()那些包含了指向其自身引用的數組。你正serialize()的數組/對象中的引用也將被存儲。
serialize()返回字符串,此字符串包含了表示value的字節流,可以存儲於任何地方。這有利於存儲或傳遞 PHP 的值,同時不丟失其類型和結構。
想要將已序列化的字符串變回 PHP 的值,可使用unserialize()。serialize()可處理除了resource之外的任何類型。甚至可以serialize()那些包含了指向其自身引用的數組。你正serialize()的數組/對象中的引用也將被存儲。
當序列化對象時,PHP 將試圖在序列動作之前調用該對象的成員函數__sleep()。這樣就允許對象在被序列化之前做任何清除操作。類似的,當使用unserialize()恢復對象時, 將調用__wakeup()成員函數。
注:在 PHP 3 中,對象屬性將被序列化,但是方法則會丟失。PHP 4 打破了此限制,可以同時存儲屬性和方法。請參見類與對象中的序列化對象部分獲取更多信息。
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後的數據其實還是能夠搜索的,因為具體的數據並沒有被加密或改變
實例: (只談對象,其他的就應該很容易了)
CPerson.php
[php]
<?php
class Person
{
public $age;
function __construct($age)
{
$this->age=$age;
}
function walk()
{
echo "I'm walking...!";
}
}
?>
test0.php 在這裡保存對象
[html]
<?php
session_start();
include_once './CPerson.php';
$person=new Person(22);
$b=serialize($person);
$_SESSION["object"]=$b;
?>
test1.php 訪問對象
[php]
<?php
session_start();
include_once './CPerson.php';
$p=$_SESSION['object'];
$a=unserialize($p);
$a->walk();
echo $a->age;
?>