PHP物件導向04

來源:互聯網
上載者:User

標籤:style   blog   color   io   os   ar   strong   檔案   資料   


oop04複習

2014-9-3 10:48:45

要點:--1、複製對象--2、__toString( )--3、 __call( )--4、自動載入類--5、對象序列化

 

1、複製對象以及__clone()方法

概述:對象屬於參考型別,普通的"="號屬於引用賦值

有時可能需要根據一個對象完全複製出一個一模一樣的對象,而且複製以後,兩個對象互不干擾。

格式:

1 $obj = new Class();2 $obj2 = clone $obj;

但是,當要複製的對象中有子物件或資源時,複製會不完整

魔術方法:__clone()
當執行clone複製時會自動調用的方法,主要用於解決對象中特殊屬性的複製操作。

2、__toString( )

概述:當試圖直接echo對象時,會報錯。我們可以在類中加上這個方法,會在echo時自動調用

樣本:

1 public function __toString(){2     echo "這是一個類.";3 }

 

3、 __call( )

概述:當試圖訪問對象中不存在的方法時,會報錯。我們可以在類中加上這個方法來處理這種情況

格式:

mixed __call( string $name , array $arguments )

第一個參數$name表示方法名
第二參數$arguments表示調用時的參數列表(數群組類型)

樣本:

1 public function __call($name,$args){2     echo "您調用的方法{$name}不存在!參數列表:";3     var_dump($args);4 }

 

4、自動載入類(__autoload())

該方法位於類之外.
當new一個新對象時,程式會試圖調用該方法自動包含所需要的檔案

樣本:

1 function __autoload($classname){2     $name=$classname.".class.php";3     if(file_exists($name)){4         require($name);5         echo "**自動載入了<font color=‘red‘>".$name."</font>類<br>";6     }else{7         die("<font color=‘red‘>".$name."</font>類不存在!");8     }9 }

 

5、對象序列化
對象也是一種在記憶體中儲存的資料類型,他的壽命通常隨著產生該對象的程式終止而終止.
有時候可能需要將對象的狀態儲存下來,需要時再將對象恢複.
**序列化(serialize):對象通過寫出描述自己狀態的數值來記錄自己,這個過程稱對象的序列化
序列化返回一個包含位元組流的字串.
以下兩種情況需要將對象序列化:
01)對象需要在網路中傳輸時,將對象序列化成二進位串即可.
02)對象需要持久儲存時,將對象序列化後寫入檔案或資料庫.

**反序列化(unserialize):能夠重新把字串變回php原來的對象值

Note:序列化一個對象將會儲存對象的所有屬性變數和類名資訊,但是不會儲存對象的方法.
所以,反序列化時需匯入原先對象的方法.

***************

[**]對象序列化中的魔術方法__sleep( )和 __wakeup( )

__sleep(): 是執行序列化時自動調用的方法,目的是實現資源類型屬性的關閉釋放等操作

Note:sleep方法需要返回一個數組,其中數組中的值是序列化時要保留的屬性名稱

__wakeup():是在執行反序列化時自動調用的方法,目的是實現資源屬性的開啟(sleep方法關閉的資源),即再次初始化.


【樣本】

1 public function __sleep(){2     //此序列化要保留四個屬性3     return array(‘server‘, ‘username‘, ‘password‘, ‘db‘);4 }

 

【完整樣本】

 1 <?php 2 //聲明一個Person類,包含三個成員屬性和一個成員方法 3 class Person {         4     public $name = "zhangsan";         //人的名字 5     public $sex = "man";           //人的性別 6     public $age = 20;              //人的年齡 7     public function say() {          //這個人可以說話的方法, 說出自己的成員屬性        8         echo "我的名字:".$this->name.",性別:".$this->sex.",年齡:".$this->age."<br>"; 9     }10 }11 $person = new Person();     //能過Person類建立一個對象,對象的引用名為$person12 $person_string = serialize($person);  //通過serialize函數將對象序列化,返回一個字串13 file_put_contents("file.txt", $person_string);  //將對象序列化後的字串儲存到file.txt檔案中14 15 //將file.txt檔案中的字串讀出來並賦給變數$person_string16 $person_string = file_get_contents("file.txt"); 17 $person = unserialize($person_string);  //進行反序列化操作,形成對象$person。18 $person -> say();        //調用對象中的say()方法,用來測試反序列化對象是否成功

 

PHP物件導向04

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.