1、什么是面向對象?
面向對象編程是一種計算機編程架構,oop的一條基本原則是計算機程序是由單個能夠起到子程序運用的單元或對象組合而成,oop達到了軟件工程的三個目標:重用性,靈活性和擴展性。
2、類和對象的關系
類與對象的關系就如模具和鑄件的關系,類的實例化的結果就是對象,而對對象的抽象就是類,類描述了一組有相同特性(屬性)和相同行為的對象。
舉例說明,類和對象的關系,就好比你去中關村買pc(電腦),你要買的是組裝pc的零件。你有一個配置單,你要買的所有的零件都在這個配置單上面。然而這 個配置單你就可以把它看做是一個類,你按照配置單上面的零件組裝成的電腦就是對象,你按照配置單組裝十台電腦那么就有是個對象,你對其中一台電腦做出改 變,配置單是不會變的,如果你對配置單做出改變那么十台電腦都會改變,這就是類和對象的關系(類的實例化結果就是對象)。
3、類的概念
類是具有相同屬性和服務的一組對象的集合。
4、對象的概念
對象是系統中用來描述客觀事物的一個實體,它是構成系統的一個基本單位。一個對象由一組屬性和對這組屬性進行操作的一組服務組成。
5、什么是面向對象編程?
你把每個獨立的功能模塊抽象成類,形成對象,有多個對象組成這個系統,這些對象之間能夠接收信息,處理數據和向其它對象發送信息等等相互作用。就構成了面向對象的程序。注:面向對象程序的單位就是對象。
6、如何抽象一個類?如何實例化一個對象?如何使用對象中的成員?
1、
class 類名{ //使用關鍵字class 后面加上你想要的類名 以及加上一對大括號,這樣一個類的結構就定義出來了
}
2、
$db = new 類名; //使用new關鍵字來生成一個對象。一個類可以實例化多個對象,每個對象都是獨立的。每個對象那個都包含了類的屬性和方法。
3、
在對象的外部去訪問對象中成員的形式
要想訪問對象中的成員就要使用一個特殊操作符“->”來完成對象成員的訪問。
訪問對象屬性 : $db->屬性();
訪問對象方法 : $db->方法();
在對象的內部去訪問對象中成員的形式
訪問對象屬性:$this->屬性();
訪問對象方法:$this->方法();
7、 構造函數
1、構造函數可以接受參數,能夠在創建對象時賦值給對象屬性。2、構造函數可以調用類方法或其他函數。3、構造函數可以調用其他類的構造函數。
function __construct(){
parent::__construct();//調用父類的構造函數;
classname::__construct();//調用其他類的構造函數 classname是類名
}
析構函數
1、析構函數是在銷毀對象時,自動調用,不能顯示的調用。2、析構函數不能帶參數。
當對象被unset();銷毀時調用析構函數。
8、封裝性
1、封裝性是面向對象的三大特性之一,封裝性就是把對象的屬性和服務結合成一個獨立的相同單位,並盡可能的隱蔽對象的內部細節,包含兩個含義:1、把對象 的全部屬性和全部服務結合在一起,形成一個不可分割的獨立單位(即對象);2、信息隱蔽,盡可能的隱藏對象的內部細節,對外形成一個邊界(或者說形成一道 屏障),只保留有限的對外接口使之與外部發生聯系。
封裝的原則
要求使對象以外的部分不能隨便存取對象的內部數據(屬性),從而有效的避免了外部錯誤對對象的”交叉感染“,使錯誤局部化,減少查錯和排錯的難度。
9、__set( ), __get( ), __isset( ), __unset( ) 四個方法的應用
1、__set()函數:自動執行,為類的私有屬性進行賦值。有兩個參數(屬性名稱,給屬性賦值);
2、__get()函數:自動執行,在類的外部獲取類的私有屬性,有一個參數(屬性名稱);
3、__isset()函數:判斷類中的變量是否存在,存在返回true,否則返回false,如果類中的變量是私有的要在類加上一個__isset()方法,自動執行。
4、__unset()函數:刪除類中的變量,如果類中的變量是私有的要在類中加上一個__unset()方法,自動執行。
10、類的繼承
繼承是面向對象的三個重要特性的一個方面,他是至建立一個新的派生類,從一個或多個先前定義的類中繼承數據核函數。
在php和Java語言里面沒有多繼承,只有單繼承,也就是說,一個類只能直接從一個類中繼承數據,這就是單繼承。
11、在子類中覆蓋父類中的方法。
把要覆蓋的父類的方法原有的功能再加上一點自己的功能,可以通過兩種方法實現在子類中調用父類被覆蓋的方法
1、“類名::方法名()”調用父類中被覆蓋的方法
2、“parent::方法名()”調用父類中被覆蓋的方法
這兩種方法都可以實現,但是不要用類名而是應該用parent,parent指的就是子類在extends聲明中的父類,這樣就可以避免在多個地方使用父 類的名字,還有就在實現的過程中如果要修改,只要修改extends聲明的部分。
注意:子類中方法的訪問權限一定不能低於父類被覆蓋方法的訪問權限,也就是一定要高於或等於父類方法的訪問權限。
12、訪問類型(public(共有的、默認)、protected(受保護的)、private(私有的))三種
1、public 公有修飾符 類中的成員、屬性、方法、訪問沒有限制,所有的外部成員都可以訪問。
2、protected 受保護修飾符 被修飾的類,類中的成員、屬性、方法不能被該類外部的代碼訪問。但是對於該子類有訪問權限。
3、private 私有修飾符 被定義的成員,對於同一個類的所有成員是可以訪問的,外部是沒有訪問權限的,對於該子類也不能訪 問被定義private的成員。
13、final關鍵字的應用
final關鍵字只能用來定義定義類和定義方法,不能使用final來定義成員屬性,因為final是常量的意,我們在php5中定義常量使用的是 define()函數,所以不使final定義成員屬性。被final定義的類不能被繼承,被final定義的方法不能被子類覆蓋。
14、static和const關鍵字的使用(self::)
static成員能夠限制外部的訪問,static的成員是屬於類的,不屬於任何對象的實例。
靜態成員被這個類的每個實例對象所共享,使用對象訪問不到靜態成員
類里面的靜態方法只能訪問類的靜態的屬性,靜態的方法是不能用對象調用的,而是使用類名來訪問
在靜態方法中訪問其他靜態成員我們使用的是一個特殊的類“self”代表這個靜態方法所在的類 即:self::成員屬性
const是一個定義常量的關鍵字 訪問方法 類名::屬性 self::屬性 注: 不加$符號
15、__toString的應用
在類中定義__tostring()方法可以直接輸出對象。
16、__call的使用
處理調用錯誤
17、抽象類和抽象方法
1、抽象方法
在類里面定義的沒有方法體的方法就是抽象方法,所謂的沒有方法體指的是,在方法聲明的時候沒有大括號以及其中的內容,而是直接在聲明時在方法名后加上分號結束,另外在聲明抽象方法時還要加一個關鍵字“abstract”來修飾
例如::abstract function fun1();
2、抽象類
只要一個類里面有一個方法是抽象方法,那么這個類就要定義為抽象類,抽象類也要使用“abstract”關鍵字來修飾;在抽象類里面可以有不是抽象的方法 和成員屬性,但只要有一個方法是抽象的方法,這個類就必須聲明為抽象類,使用”abstract”來修飾