面向對象的概念(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