7.7.9 對(duì)象串行化(序列化)1

7.7.9 對(duì)象串行化(序列化)1

對(duì)象也是一種在內(nèi)存中存儲(chǔ)的數(shù)據(jù)類型,他的壽命通常隨著生成該對(duì)象的程序終止而終止。有時(shí)候可能需要將對(duì)象的狀態(tài)保存下來(lái),需要時(shí)再將對(duì)象恢復(fù)。對(duì)象通過(guò)寫(xiě)出描述自己狀態(tài)的數(shù)值來(lái)記錄自己,這個(gè)過(guò)程稱對(duì)象的串行化(Serialization)。以下兩種情況需要將對(duì)象串行化:
對(duì)象需要在網(wǎng)絡(luò)中傳輸時(shí),將對(duì)象串行化成二進(jìn)制串即可。
對(duì)象需要持久保存時(shí),將對(duì)象串行化后寫(xiě)入文件或數(shù)據(jù)庫(kù)。
串行化和反串行化函數(shù):
serialize() -- 串行化,返回一個(gè)包含字節(jié)流的字符串
unserialize() -- 反串行化,能夠重新把字符串變回php原來(lái)的對(duì)象值。
串行化一個(gè)對(duì)象將會(huì)保存對(duì)象的所有屬性變量和類名信息,但是不會(huì)保存對(duì)象的方法。

objstr.txt

O:6:"Person":4:{s:4:"name";s:6:"張三";s:3:"age";i:10;s:3:"sex";s:3:"男";s:4:"marr";a:5:{i:0;s:3:"aaa";i:1;s:3:"bbb";i:2;s:3:"ccc";i:3;s:3:"ddd";i:4;s:3:"www";}}

read.php

<?php
    include "test.php";

    
    //讀出字符串從文件中
    $str = file_get_contents("objstr.txt");

    //返串行化
    $p = unserialize($str);


    $p->say();

test.php

<?php
/*  
 *  魔術(shù)方法, 只有PHP語(yǔ)言中存在
 *
 *
 *   __construct()
 *
 *   __destruct()
 *
 *   __set()
 *
 *   __get()
 *
 *   __isset()
 *
 *   __unset()
 *
 *   1. 自動(dòng)調(diào)用, 但不同的魔術(shù)方法,有自己的調(diào)時(shí)機(jī)
 *   2. 都是以"__"開(kāi)始的方法
 *   3. 所有的魔術(shù)方法,方法名都是固定的
 *   4. 如果不寫(xiě), 就不存在, 也就沒(méi)有默認(rèn)的功能
 *
 *  
 *
 *  __toString() 
 *
 *      1. 是在直接使用 echo print printf輸出一個(gè)對(duì)象引用時(shí),自動(dòng)調(diào)用這個(gè)方法
 *      2. 將對(duì)象的基本信息放在__toString()方法內(nèi)部, 形成自字符串返回。
 *      3. __toString()方法中, 不能有參數(shù), 而且必須返回一個(gè)字符串
 *
 *
 *  克隆對(duì)象
 *      1. 使用clone這個(gè)關(guān)鍵 復(fù)制了一個(gè)對(duì)象  
 *
 *
 *      __clone()魔術(shù)方法
 *
 *      1. 是在克隆對(duì)象時(shí),自動(dòng)調(diào)用的方法
 *      2. 作用:和構(gòu)造方法一樣, 是對(duì)新克隆的對(duì)象進(jìn)行初使化
 *      3. 在這個(gè)方法中$this代表的是副本, 所以就可以給所有副本的成員初使化
 *
 *   __call()
 *
 *      1. 就是在調(diào)用一個(gè)對(duì)象中不存的方法時(shí),自動(dòng)調(diào)用的方法
 *      2. 有兩個(gè)參數(shù), 第一個(gè)參數(shù)是, 調(diào)用的不存的方法的方法名, 第二個(gè)參數(shù)是,調(diào)用這個(gè)不存的方法的方法參數(shù)
 *      3. 作用:可以寫(xiě)提示,但這個(gè)不是主要的功能。 將方法的功能相似, 但方法名還要不同的, 就可以采用這個(gè)方式來(lái)完成
 *
 *  串行化(序列化)
 *
 *      1. 將對(duì)象轉(zhuǎn)成字符串(不用看懂) ---  串行化
 *      2. 將字符串轉(zhuǎn)回對(duì)象           --- 返串行化
 *
 *
 *      注意(串行化的時(shí)機(jī)):
 *
 *      1. 將對(duì)象在網(wǎng)絡(luò)中傳輸
 *      2. 將對(duì)象持久保存 
 *
 *      
 *      
 *
 */ 

    class Person {
        public $name;
        public $age;
        public $sex;    

        public $marr = array("aaa", "bbb", "ccc", "ddd", "www");

        function __construct($name, $age, $sex) {
            $this->name = $name;
            $this->age = $age;
            $this->sex = $sex;
        }

        function say() {
            echo "我的名子是:{$this->name},我的年齡是:{$this->age},我的性別是:{$this->sex}。<br>";
        }

        function __toString() {
            return "aaaaaaaaaaaaaaaaaaa<br>";
        }

        function __destruct() {
            echo "{$this->name} ###########<br>";
        }

        function __clone() {
            $this->name="克隆的";
            $this->age=0;
        }

        function __call($method, $args) {
            if(in_array($method, $this->marr)) {
                echo $args[0]."<br>";   
            }else{
                echo "你調(diào)用的方法{$method}()不存在!<br>";
            }
        }
/*
        function aaa($a) {
            echo $a;
        }

        function bbb($b) {
            echo $b;
        }

        function ccc($c) {
            echo $c;
        }

        function ddd($d) {
            echo $d;
        }
 */     
    }

write.php

<?php
    include "test.php";

    //對(duì)象
    $p = new Person("張三", 10, "男");

    //將對(duì)象串行化
    $str = serialize($p);

    //將字符串保存在文件夾objstr.txt中
    file_put_contents("objstr.txt", $str);

    echo "對(duì)象轉(zhuǎn)完字符串, 保存到文件中成功!";
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 7.7.10 對(duì)象串行化(序列化)2 對(duì)象也是一種在內(nèi)存中存儲(chǔ)的數(shù)據(jù)類型,他的壽命通常隨著生成該對(duì)象的程序終止而終...
    曹淵說(shuō)創(chuàng)業(yè)閱讀 424評(píng)論 0 0
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 11,141評(píng)論 6 13
  • 第5章 引用類型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,270評(píng)論 0 4
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,914評(píng)論 18 139
  • 張麗麗 ,株洲人,當(dāng)年朋友推薦她購(gòu)買(mǎi)百度的原始股2萬(wàn)股,她覺(jué)得很好,但又拿不定主意,就去問(wèn)了她的同學(xué):株洲工商銀行...
    古墓道人閱讀 501評(píng)論 0 0