PHP 面向對象

面向對象的概念(OOP)

¨對象
¨類

¨對象和類的關係 php


PHP5已經徹底支持面向對象
屬性
¨在類定義中聲明變量,即建立了類的屬性
方法
¨在類定義中聲明函數,即建立了方法
PHP中屬性與方法的引用操做符是「 - > 」 函數



$this

¨對象內部表明這個對象的引用
構造函數
¨function __construct ( [參數] ) { ... ... }
¨當建立一個對象時,它將自動調用構造函數


構造函數兼容

¨PHP4中,構造函數的名稱必須與類名相同。
爲了向下兼容,若是一個類中沒有名爲
__construct( )的方法,PHP將搜索一個與類名
相同的方法


析構函數  

¨function __destruct ( ) { ... ... } ¨析構函數是 PHP5新添加的內容,在 PHP4中沒  
有析構函數   
¨析構函數容許在銷燬一個類以前執行的一些操  
做或完成一些功能   
¨析構函數不能帶有任何參數  


訪問類型  

¨這是PHP5的新特性,但倒是OOP語言的一個  
重要特性,並且大多數OOP語言都已支持。   
PHP5支持以下 3種訪問修飾符:   
• public (公有的默認的)   
• private (私有的)   
• protected (受保護的)   


• public  
¨類的成員將沒有訪問限制,全部的外部成員都  
能夠訪問(讀和寫)這個類成員  
¨在PHP5以前的全部版本中,類的成員都是 public的  
• private  
¨對於該類的外部代碼是不容許改變甚至讀操做   this

protected

¨對於該類的直接子類有訪問權限 spa


OOP三個基本特徵

¨封裝
¨繼承
¨多態

封裝  
¨封裝性就是把對象的屬性和行爲結合成一個獨  
立的相同單位,並儘量隱蔽對象的內部細節。  
¨將類的成員變量聲明爲 private,再經過public 的  
方法來對這個變量進行訪問   指針

私有屬性的訪問
¨set/get方法
¨在PHP5中,預約義了兩個函數__get()和
__set()來獲取和賦值其屬性,檢查屬性的
__isset()和刪除屬性的方法__unset() 對象


__get()
n __set()
function __get($property_name) {
if(isset($this->$property_name)) {
return($this->$property_name);
} else {
return null;
}
}
function __set($property_name, $value) {
$this->$property_name = $value;
} 繼承


__isset()
n __unset()
function __isset($name) {
return isset($this->$name);
}
function __unset($name) {
unset($this->$name);
} 接口

繼承(is a) ¨在PHP中只有單繼承,但一個類能夠被多個類  
繼承  
¨能夠有多層繼承,即一個類能夠繼承某一個類  
的子類  
¨子類繼承父類的全部內容,但父類中的private部分不能直接訪問  
¨子類中新增長的屬性和方法是對父類的擴展   get



覆蓋

¨子類中定義的與父類同名的屬性是對父類屬性
的覆蓋,同名的方法也是對父類方法的覆蓋
¨子類中的訪問權限>=父類權限
¨調用父類被覆蓋的方法:類名::或parent::
parent::__construct();
parent::$name;
parent::fun();


多態

¨對象的多態性是指在父類中定義的屬性或行爲
被子類繼承以後,能夠具備不一樣的數據類型或
表現出不一樣的行爲
¨在PHP中,多態的特性並不明顯


包含(has a)

¨一個類中包含另外一個類對象


final

¨使用final關鍵字標記的類不能被繼承
¨使用final關鍵字標記的方法不能被子類覆蓋


static

¨在類內部,不能用$this來引用靜態變量或方
法,而須要用self來引用
self::$靜態屬性、self::靜態方法
¨在類外部可使用
類::$靜態屬性、類::靜態方法


const

¨在類裏面定義常量使用的是」const」
¨self::CONSTANT; // 類內部訪問
¨類名::CONSTANT; // 類外部訪問


__toString()

¨直接輸出對象引用時自動調用 io


對象的比較

¨==是比較兩個對象的內容
¨===是比較對象的句柄,即引用地址
n 對象類型檢測
¨instanceof操做符用於檢測當前對象實例是否
屬於某一個類的類型



克隆對象

¨在PHP5中要建立一個對象的副本,使用關鍵
字clone來實現
¨$obj2 = clone $obj;
n __clone()
¨在對象克隆時自動調用
¨__clone()能夠沒有參數,它自動包含$this和
$that兩個指針,$this指向複本,而$that指向
本來


__call()

¨調用不存在的方法時自動調用
n __autoload()
¨自動加載類
function __autoload($class_name) {
include("$class_name"."_class.php");
}


序列化

¨serialize()
¨unserialize()




抽象方法和抽象類

¨abstract function 方法名( );
¨abstract class 類名{ }
¨抽象類不能被實例化,一個抽象類中必須有一
個抽象方法



接口

¨若是在一個抽象類中包含的只有抽象方法,可 以將其定義爲interface(接口) ¨class 類名implements 接口名{ } ¨接口中只能聲明常量屬性,接口中的方法必須 定義爲公有、抽象 ¨接口中的方法也能夠聲明爲static
相關文章
相關標籤/搜索