標籤:tostring copy gif 圖片 存取權限 interface 不同的 value 類型
一、建構函式、解構函式
(1)建構函式:__construct()
說明:對象被執行個體化時調用,可帶參數
例:
$obj = new A($a,$b);
(2)解構函式:_destruct()
說明:頁面執行結束調用。用於清理程式資源
二、對象的引用
(1)不同的引用,同一個對象:
$a = new A;$b = $c = $a;//就像a、b、c(對象別名)共住一個房子(對象)unset($a);//對象未銷毀unset($a,$b,$c);//對象銷毀
(2)同一個引用,共用一個變數,只是名字不同:
$a = new A;$d = &$a;unset($a);//對象銷毀unset($b);//對象銷毀
(3)複製對象,不同的對象:
$a = new A;$b = clone $a;
三、繼承:extends
說明:
(1)單繼承,extends後面只能接一個父類
(2)重寫的方法必須與原方法(參數,類型)完全相同
優點:子類成員不用重複定義
例:
class Zi extends Fu{ protected function cry(){ parent::cry(); }}
四、存取控制,三種存取權限:
(1)public :公有的,可以在任何地方被訪問
(2)protected :受保護的,可以被自身及子類訪問
(3)private :私人的,只能被自身訪問
五、靜態成員:static
(1)靜態屬性用於儲存類的共有資料
(2)和類儲存在一起,而不是和對象,因此可以不用執行個體化直接調用。
(3)靜態方法裡面只能訪問靜態屬性,不能使用this。
self::也能訪問自身非靜態成員
例:
class A { public static $a=1; const STR = ‘str‘;//常量,不允許修改}
在類中調用:self::$a(自身、父類) 或 static::$a(自身)
在類外調用:A::$a
$AC = new A;$BC = new A;$AC::$a=2;echo $BC::$a;
六、final關鍵字
(1)子類中編寫跟父類方法名完全一致的方法可以完成對父類方法的重寫(有參數也不影響)。
(2)父類方法前添加final關鍵字,無法在子類裡重寫。
(3)對於不想被任何類繼承的父類可以在父類class之前添加final關鍵字。
(4)添加final關鍵字的類/方法,只是不能被重寫/繼承,但可以調用
例:
final class A { final public function a(){}}
七、介面:interface
(1)只能為public
(2)只能聲明常量
(3)全部為抽象方法
(4)類必須實現介面全部的方法
(5)介面可extends(繼承)多介面
(6)類可implements(實現)多介面
(7)可以用$a instanceof A判斷對象時候實現了介面
(8)重寫的方法必須與原方法(參數,類型)完全相同
優點:功能自由組合。如,使用者:登入,發訊息,傳圖片等,放在一個類中太龐大不靈活,可做成介面,用的時候再調;註冊:驗證郵箱,加密。
例:
interface a { public function saya();}interface b { public function sayb();}interface c { public function sayc();}interface d extends a,b { public function sayd();}class fu implements d,c{ public function saya(){} public function sayb(){} public function sayc(){} public function sayd(){}}
八、抽象類別:abstract
(1)abstract關鍵字用於定義抽象類別
(2)在抽象方法前面添加abstract關鍵字,不需要具體的實現
(3)抽象類別中可以包含普通的方法,有方法的具體實現
(4)繼承抽象類別的子類需要實現抽象類別中定義的抽象方法
優點:定義類規範。如,定義簡訊規範串連不同的服務商,定義資料庫規範串連不同資料庫
例:
abstract class A { abstract public function a(); public b(){}}
九、魔術方法
(1)__tostring() :當對象被當做string使用時方法自動調用
例:
echo $obj;public function __tostring(){ return ‘__tostring‘;}
(2)__invoke() :當對象被當成方法被調用時方法自動調用
例:
$obj(4);
方法的重載:
(3)__call($a,$arr) :對象調用不存在的方法自動調用
(4)__callstatic($a,$arr) :對象調用不存在的靜態方法自動調用,方法必須加關鍵字static
例:function static __callstatic(){}
屬性的重載
(5)__set() :在給不可訪問屬性賦值時,__set()會被調用 例:function __set($name,$value)
(6)__get():讀取不可訪問屬性的值時,__get()會被調用 例:function __get($name)
(7)__isset():當對不可訪問屬性調用isset()或empty()時,__isset()會被調用
(8)__unset():當對不可訪問的屬性調用unset()時,__unset()會被調用
所謂不可訪問屬性,實際上就是在調用某個屬性時發現這個屬性沒有被定義,這時候不同的操作會觸發不同的魔術方法
(9)__clone():對象被clone時自動調用
優點:自訂複製哪些屬性,使被複製的對象的一些屬性不被複製過去。
例:
obj1 = clone $obj; //實現對象複製,變成值相同的兩個對象
PHP物件導向筆記