標籤: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