標籤:
1.靜態屬性/方法
①定義
在屬性/方法前加static修飾,就稱之為靜態屬性/方法
普通屬性/方法是依賴於對象的,必須在執行個體化對象後,
才會出現在記憶體中,進行訪問及操作
而靜態屬性/方法不依賴於對象,當類聲明後,即可進行訪問操作
因此,其只會有一份,不會根據對象的增加而增加
②調用及訪問
調用本類 self::$靜態屬性;self::靜態方法();
調用父類 parent::$靜態屬性;parent::靜態方法();
外部存取 類名::$靜態屬性;類名::靜態方法();
③延遲綁定
父類中包含:a() b(self::a()) 子類中包含:a()
當子類調用b()方法時,因其自身無b()方法,則找到父類的b()方法
而b()方法中的self指其自身,也就是調用父類中的a()方法
而將self改為static,則返回找到子類自身的a()方法
總結:self是指當前所在的類;而static是指調用者
2.類常量
①定義
只在類的內部發揮作用的常量稱為類常量
又可以理解為不可修改的靜態屬性
在屬性前添加const修飾,不能添加許可權修飾符
聲明及使用時都不需要使用$符
②魔術常量
PHP內建的類常量,無法設定值,其值是隨著環境變化而改變的
__FILE__ 檔案的完整路徑和檔案名稱;常用於在初始化指令碼時,檢測網站的根目錄
__LINE__ 檔案中當前的行號;常用於在DEBUG時,記錄錯誤資訊
__DIR__檔案所在目錄
__CLASS__ 返回當前的類名
__METHOD__ 返回當前的方法名
3.單例模式
①作用
為了防止某個類被多名開發人員反覆執行個體化,造成資源浪費
而對其進行限制,只允許有一個執行個體存在,稱為單例模式
②文法
class 類名 {
//建立一個靜態保護屬性,用於存放執行個體化結果
static protected $屬性名稱;
//將構造方法設定為最終及保護,防止被繼承後重寫或直接執行個體化
final protected function __construct () {
}
//建立靜態公用方法,用於在外部通過類直接調用
static public function 方法名 () {
//判斷是否已經存在一個執行個體
if(self::$屬性名稱 instanceof self) {
//若存在則直接返回
return self::$屬性名稱;
}else{
//若不存在,則執行個體化後再返回
self::$屬性名稱 = new self();
return self::$屬性名稱;
}
}
}
$對象 = 類名::方法名();//通過調用類中的方法產生一個唯一的對象
③註解
final修飾的類不能被繼承;final修飾的方法可以被繼承,但不能重寫
對象 instanceof 類名 可用於判斷對象是否為該類的執行個體
4.抽象類別
①定義
類前添加abstract修飾則為抽象類別;方法前加abstract修飾則為抽象方法
抽象類別不能被執行個體化;抽象方法不能有方法體,即{}
用於統一所有子類所具有的功能,正常化操作、增強可拓展性
②文法
abstract class 父類 {
public abstract function 方法名();
}
③注意
有抽象方法(包括繼承來的)的類一定是抽象類別;抽象類別裡不一定有抽象方法
要對抽象類別進行執行個體化,需要先繼承,並完成所有抽象方法
5.介面
①定義
是抽象類別的變體
如果說類是對象的抽象,那麼介面就是類的抽象
介面組合成不同的類,而類則執行個體化出不同的對象
②文法
interface 介面名 {
public function 方法();
}
class 類名 implements 介面1,介面2,... {
public function 方法(){
}
}
③注意
因介面中方法必須是抽象的,所以不需要加abstract
一個介面可以繼承自另一個介面,與類的繼承相同
④抽象類別與介面的區別
抽象類別中可以有普通屬性/方法/構造方法;介面中必須只有抽象方法
抽象類別中的方法可以是私人的;介面中的方法只能是公用的
一個類只能繼承自一個抽象類別;一個類卻可以實現多個介面
@zhnoah
出處:http://www.cnblogs.com/zhnoah/
本文著作權歸本人和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連
接,否則保留追究法律責任的權利。
PHP學習筆記——11.物件導向2