首頁  >  文章  >  後端開發  >  講解PHP物件導向序列化、反序列化的相關程式碼

講解PHP物件導向序列化、反序列化的相關程式碼

jacklove
jacklove原創
2018-06-08 14:09:351385瀏覽

PHP物件導向序列化、反序列化的內容在php中很重要,本篇文章講解其相關的程式碼內容。

序列化 (Serialization):將物件的狀態資訊轉換為可以儲存或傳輸的形式的過程。

警告:各種語言所採用的序列化機制往往不一樣,不相容。

1 序列化serialize()

string serialize ( mixed $value )

serialize() 傳回字串,此字串包含了表示 value 的位元組流,同時不遺失其類型和結構。

serialize() 可處理除了 resource 之外的任何類型。甚至可以 serialize() 那些包含了指向其自身引用的陣列。

當序列化物件時,PHP 會試圖在序列動作之前呼叫該物件的成員函數 __sleep()。這樣就允許物件在被序列化之前做任何清除操作。

2 反序列化unserialize()

mixed unserialize ( string $str )

想要將已序列化的字串變回PHP 的值,可使用unserialize ()。

當使用 unserialize() 復原物件時, 將呼叫 __wakeup() 成員函數。

如果要想在另外一個檔案中反序列化一個對象,必須要在反序列化之前定義這個物件的類別。   

// 未定義物件的類別時,若反序列化,會得到下面的__PHP_Incomplete_Class對象,不含方法。

__PHP_Incomplete_Class Object
(
    [__PHP_Incomplete_Class_Name] => Person
    [name:Person:private] => jack
    [age:Person:private] => 18
    [sex:Person:private] => M
)
<!--?php 
class Person {
    private $name;
    private $age;
    private $sex;
    function __construct($name, $age, $sex) {
        $this--->name = $name;
        $this->age = $age;
        $this->sex = $sex;
    } 
    function __sleep() {
        $arr = array(&#39;name&#39;, &#39;age&#39;);
        return $arr;
    }
    function __wakeup() {
        $this->sex = &#39;F&#39;;
        $this->age = 20;
    }
    function say() {
        echo &#39;My name is: &#39; . $this->name . &#39;,My age is: &#39; . $this->age . &#39;,My sex is: &#39; . $this->sex . PHP_EOL;
    }
}
$p = new Person(&#39;jack&#39;, 18, &#39;M&#39;);
$p->say(); // My name is: jack,My age is: 18,My sex is: M
$s = serialize($p); //得到(O:6:"Person":3:{s:12:"Personname";s:4:"jack";s:11:"Personage";i:18;s:11:"Personsex";s:1:"M";})字符串,有特殊字符
echo $s . PHP_EOL;
$o = unserialize($s); // 反序列化之前必须要定义这个对象的类
$o->say(); // My name is: jack,My age is: 20,My sex is: F

    本文章詳解了HP物件導向序列化、反序列化的相關程式碼的內容,更多相關知識請關注php中文網。

相關推薦:

如何透過PHP方法判斷是否為手機登入(代碼)

如何透過php循環和遞歸實現無限級分類

在PHP中使用魔術方法__CLASS__來取得類別名稱的相關操作

以上是講解PHP物件導向序列化、反序列化的相關程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn