標籤:通過 const 魔術 耦合 load lstat 結束 返回 vat
本文主要闡述物件導向的基本概念,如有問題,還請斧正。
首先說明,涉及的一些知識點,算是提綱吧 。
1 類的基本概念;2 對象的基本概念;3 存取控制;4 建構函式,解構函式;5魔術方法;6 介面;7 多態;8 封裝;9繼承;10 static與final
一,類的基本概念
1 什麼是類? 類即擁有相同屬性和行為的一個集合體。舉個例子 ,我們日常生活中的車 是一個類,車擁有相同的屬性(顏色,大小,重量)和行為(行駛);又如動物也是一個類,動物擁有相同的屬性(大小)和行為(吃,喝);我們將這些擁有相同的屬性和行為的一些事物叫做一個類。
2 在程式中如何申明一個類,用關鍵字 class 例
class Person{ // 屬性; // 行為;}
在這裡我們申明了一個人類
二 ,對象的基本概念
1 什麼是對象? 對象即是一個具體的事物,也或者是一個抽象的事物,對象時從類執行個體化而來。例: 上面我們說車是一個類,那麼寶馬,平治等就是對象,總結一句,對象就是將類具體化了。
2 對象的兩個部分
(1)對象的組成元素,是對象的資料模型,用於描述對象的資料,又別稱為屬性;
(2)對象的行為,對象的行為模型,用於描述對象具體能做什麼事情,又被稱為方法;
3 對象的兩個特徵
(1)高內聚, 即在對象的內部屬性和方法對內是可見,在對象的內部屬性和方法都是可以被修改和訪問的;
(2)低耦合 , 在對象的外部,我們只能看見一部分的方法和屬性;涉及到存取控制,後文在述。
4 如何執行個體化一個對象,用關鍵字 new 上面我們申明了一個人類,現在我們將這個人類 執行個體化。
執行個體化一個張三的對象
$zhangsan = new Person();
三 , 存取控制 :主要用修飾符public protected private 來控制訪問的許可權; 例
class Person{ public $name; //公有的,可以被任何訪問 protected $sex; // 受保護的,可以被自身和子類訪問 private $age; // 私人的,只能被自己訪問}
四, 建構函式,和解構函式
1 建構函式 ,建構函式為類中的一個方法,當我們執行個體化這個類的時候 自動調用,建構函式的目的是為了完成一些初始化的工作。用__construct 例
class Person{ public $name; //公有的,可以被任何訪問 protected $sex; // 受保護的,可以被自身和子類訪問 private $age; // 私人的,只能被自己訪問 //當我們new這個類時 自動調用 public function __construct(){ echo "你好"; }}
2 解構函式 ,當對象被銷毀的時候自動調用,我們常用解構函式來銷毀變數,以達到釋放記憶體的 目的。 用 __desturct 寫法同上。
五, 魔術方法,原理和建構函式差不多,在特定的情況下自動調用。
- __tostring 當對象被作為字串使用時,自動調用,返回字串;
- __invote 當對象被作為方法使用時,自動調用;
- __call 當對象訪問不存在的方法或者未公開的方法是,自動調用,返回被調用的函數名,和參數數組;
- __callStatic 當對象訪問不存在的靜態方法,或者未公開的時候自動調用,返回調用函數名,和參數數組;
- __get 對象訪問不可訪問的屬性時候,自動調用,返回不可訪問的屬性名稱;
- __set 給不可訪問的屬性賦值時,自動調用,返回屬性名稱,和賦值參數;
- __isset 用isset()/empty()檢測不可訪問的屬性時,自動調用,返回檢測的屬性名稱;
- __unset 用unset()刪除不可訪問的屬性時,自動調用,返回刪除屬性名稱;
- __clone 使用clone關鍵字複製對象時,自動調用,作用是為新的複製對象賦初始值;
- __sleep 對象序列化時,自動調用,返回一個數組,數組中的值就是可以序列化的屬性;
- __wakeup 對象還原序列化時,自動調用,為還原序列化新產生的對象,賦初始值;
- __autoload 需要在內外部聲明函數。當執行個體一個未申明的類時,自動調用,傳遞執行個體化的類名,可以使用類名自動載入對應的類檔案;
六,介面
1 什麼是介面? 介面提供了一組實現介面的類 必須實現的方法組合 ,介面裡面的方法沒有方法體(具體的執行代碼)介面裡面的方法都是抽象方法。
2 如何聲明一個介面 例:
interface Inter { public function eat(); //沒有具體的方法體 public function run(); }
3 當一個類去實現一個介面的時候 必須實現介面裡面的方法,除非這個類時抽象類別 例
// 申明一個介面interface Inter { public funtion eat(); public funtion run();}//一個類去實現介面class Person implements Inter{ //這個類必須去實現介面中的方法 public function eat(){ //具體的方法} public function run (){ //具體的方法}}
4 介面可以被繼承,用關鍵字extends 寫法 interface inter1 extends Inter { } inter1介面繼承了Inter介面,介面的繼承可以是一對多,即一個介面可以繼承多個父介面。注意:當一個類去實現了一個子介面的時候,它也必須實現父介面裡面的抽象方法。
七 ,多態
1 多態是一種現象,當一個類被多個子類所繼承,如果這個類中的方法在子類中表現出了不同的功能,我們稱這種現象為多態;
八 ,封裝
1 封裝 通過存取修飾詞 將類中不需要外部存取的屬性和方法進行私人化處理,實現存取控制,讓使用者只能通過我們提供的方法對屬性和方法進行訪問。
2 封裝的好處,可以重複調用避免了代碼的冗餘。
九 ,繼承 類可以被繼承,子類擁有父類的屬性和方法,子類可以修改父類的成員,我們稱之為重寫,當子類 重寫父類的方法後,按照子類的方法運行 通過關鍵字extends 實現繼承
例子
//聲明一個類class Person{ $name; public function say(){ echo $this->name."今天天氣不錯哦"//$this php中的偽變數,代表自身對象我們在類內部訪問屬性時一般用$this }}//繼承一個類class Man extends Person{ //將父類的say方法重寫 public function say(){ echo "晚飯吃什嗎?" }
}
十, 關鍵字 final 和static
1 final php5中引入關鍵字final 當用final 修飾類的時候這個類可以理解為最終類,這個類不能被繼承;當用final修飾方法時,這個方法可以就理解為最終方法,不能夠被重寫。
2 static 靜態成員 //用static 修飾的屬性和方法被稱為靜態屬性和靜態方法
(1)靜態屬性儲存了公有的資料;
(2)靜態方法只能訪問靜態屬性;
(3)靜態成員不要要執行個體化就可以訪問,
(4)靜態方法不能夠去調用非靜態成員,然而非靜態方法則可以調用靜態成員,因為靜態成員在載入的時候已經產生,而非靜態成員此時沒有執行個體化誕生。
(5)如何訪問? 在類內部訪問 用 self 或者static訪問 格式 : self/static::$屬性名稱 ; parent::$屬性名稱訪問父類屬性 在類外部調用 : 類名::$屬性。
結束語 :以上是關於物件導向編程的一些基本概念,以後閑的時候在弄些其他東西,話說這是在下的第一篇部落格,
2018-09-02 21:39:26
PHP 物件導向基礎