標籤:
1.概述
①物件導向(OOP)
物件導向編程是一種電腦編程架構
基本原則是電腦程式是由單個能夠起到子程式作用的單元或對象組合而成
需要達到三個主要目標:重用性、靈活性和擴充性
物件導向的三大特點(封裝,繼承,多態)缺一不可
而“基於對象”是指只能使用已封裝好的對象,無法派生出新的物件類型
②類與對象
類描述了一組有相同特性(屬性)和相同行為(方法)的對象;它為屬於該類的所有對象提供了統一的抽象描述
類就是一種資料類型,而物件導向與面向過程最大的區別就在於可以根據需求進行自訂資料類型
對象是系統中用來描述客觀事物的一個實體,它是構成系統的一個基本單位
③屬性與方法
屬性 -> 該類有什麼(名詞) -> 即為‘變數‘
方法 -> 該類能幹什麼(動詞) -> 即為‘函數‘
2.聲明及應用
①基礎文法
class 類名 {
public $屬性名稱[ = ‘屬性值‘];
public function 方法名() {
echo $this -> 屬性名稱/方法名();
}
}
$對象 = new 類名();
$對象 -> 屬性名稱[ = ‘新屬性值‘];
$對象 -> 方法名();
注意:
類名通常單字首大寫,如ActionClass
屬性值必須為直接值,不能是運算式或函數傳回值
方法內可直接調用類外部普通函數;不可調用外部變數
②許可權修飾
可在屬性名稱/方法名前添加public/protected/private進行修飾;
若不加,則預設為public方式
訪問/修改的許可權為:
publicprotectedprivate
本類中 √ √ √
子類中 √ √ X
外部 √ X X
3.三大特徵
①封裝
定義:
隱藏屬性和方法的實現細節,僅對外公開介面;
控製程序中屬性/方法的讀、修改的存取層級
文法:
class 類名 {
private $屬性名稱[ = ‘屬性值‘];
private function 方法名 () {
方法體;
}
public function 公用方法名 () {
方法體;//對private屬性/方法進行操作
}
}
$對象 = new 類名();
$對象 -> 公用方法名();
②繼承
定義:
一個類以某“一個”類作為父類
在繼承父類的所有屬性和方法的基礎上,做進一步的增加或修改
文法:
class 子類 extents 父類 {
屬性/方法;
}
注意:
子類中訪問父類的public/protected方法(包括構造方法/靜態方法),需使用parent::方法名();
子類中訪問父類的private方法,需通過訪問訪問父類的public方法間接進行
子類在對父類的屬性/方法進行重寫(override)時,許可權只能放寬鬆或保持不變
重載(overload):
指在一個類中存在多個同名方法(參數類型或數量不同);
在調用時,會根據傳入的參數,調用相對應的方法
PHP中不允許出現同名方法,但可通過func_get_args()方法擷取傳入的參數,
進行判斷類比出重載效果
註:func_get_args()方法返回的是數群組類型
③多態
定義:
在強型別語言中,方法的參數在聲明時是什麼類型,傳參時也必須是該類型
為了具有靈活多變的特性,讓參數類型由傳入的子類參數類型來決定
而PHP是弱類型語言,對類型沒有任何的限制,傳參時可使用任意類型的資料
反而使程式不夠嚴謹,則需要做一定的限制,來形成完善的多態
文法:
class 類名 {
public function 方法名(父類 $變數){
方法體;
}
}
class 父類 {//用於對類型做限制
}
class 子類1 extents 父類 {
public function 子類方法名() {
方法體;
}
}
class 子類2 extents 父類 {
public function 子類方法名() {
方法體;
}
}
$對象 = new 類名();
$對象1 = new 子類1();
$對象2 = new 子類2();
$對象 -> 方法名($對象1);
$對象 -> 方法名($對象2); //相同的方法因傳入的參數不同而產生不同作用
@zhnoah
出處:http://www.cnblogs.com/zhnoah/
本文著作權歸本人和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連
接,否則保留追究法律責任的權利。
PHP學習筆記——9.物件導向