面向對象:Object Oriented
對象:Object
面向:Oriented
時間萬物皆對象;包括抽象對象
對象包含兩部分:
1.對象的組成元素
是對象的數據模型,用於面向對象的數據
又被稱爲對象的屬性,或者對象的成員變量
2.對象的行爲
是對象的行爲模型,用於描述對象可以作什麼事情
又被稱爲對象的方法
對象的特色
1.每個對象都是獨一無二的
2.對象是一個特定事物,他的職能是完成特定功能
3.對象是能夠重複使用的
基本概念
1.什麼是面向對象
面向就是已對象爲中心
面向對象編程就是在編程的時候數據結構(數據組織方式)都經過對象的結構進行存儲
2.爲何要使用面向對象
對象的描述方式更加貼合真實的世界,有利於大型業務的理解
在程序設計的過程當中用對象的視角分析世界的時候可以拉近程序設計和真是世界的距離
面向對象的實質
1.面向對象就是把生活中要解決的問題用對象的方式存儲
屬性
方法
2.對象與對象之間經過方法的調用完成互動
方法調用:對象跟自身和其餘對象之間的交互
面向對象基本思路
1. 識別對象
任何實體均可以被識別爲一個對象
2.識別對象的屬性
對象裏面存儲的數據被識別爲屬性
對於不一樣的業務邏輯,關注的數據不一樣,對象裏面存儲的屬性也不一樣
3.識別對象的行爲
對象本身屬性數據的改變
對象和外部交互
面向對象的基本原則
1.對象內部是高內聚的
對象只負責一項特定的職能(職能可大可小)
2.全部對象相關的內容都封裝到對象內部
對象對外是低耦合的
1.外部世界能夠看到對象的一些屬性(並不是所有)
2.外部世界能夠看到對象能夠作某些事情(並不是所有)
基本實踐
1.類的概念
物以類聚,把具備類似特性的對象歸類到一個類中
類定義了這些類似對象擁有的相同的屬性和方法
類是類似對象的描述,稱爲類的定義,是該類對象的藍圖或者原型
類的對象稱爲類的一個實例
類的屬性和方法統稱爲類成員
類的實例化(instantiate)
1.類的實例化就是經過類定義建立一個類的對象
類的的定義裏面屬性值都是空的,而對象的屬性都具備具體的值
2.構造函數
__construct()函數在對象被實例化的時候自動調用
3.析構函數
__destruct()函數在程序執行結束的時候會自動調用
當對象不會再被使用的時候能夠觸發析構函數的調用
析構函數一般被用於清理程序使用的資源
4.對象引用賦值
對象的引用用於訪問對象的屬性和方法;
高級實踐
1.繼承
擁有部分相同的屬性和方法時
2.繼承的好處
父類裏面定義的類成員能夠不用再子類中重複定義,節約了編程時間和代價
同一個父類的子類用於相同的父類定義的類成員,所以外部代碼調用它們的時候能夠一視同仁
子類能夠修改和調整父類定義的類成員(重寫overwrite),子類修改後按照子類修改以後的執行
子類對象能夠直接訪問父類的屬性和方法
extends關鍵字類的繼承,單繼承;
3.訪問控制
public公有的類成員,任何地方
protected 受保護的類成員,能夠被其自身以及其子類訪問
private私有的類成員,只能被自身訪問
4.靜態成員
靜態屬性定義是在訪問控制關鍵字後面添加static關鍵字(靜態方法同理)public static $abc; public static fucntion (){}
在類定義中使用靜態成員的時候,用self(static)關鍵字後面::操做符便可(self::$abc)
類定義外部訪問靜態屬性,類名::屬性(方法);
子類訪問 parent::屬性(方法)
總結:1.靜態屬性用於保存類的公有數據
2.靜態方法裏面只能訪問靜態屬性
3.靜態成員不須要實例化對象就能夠訪問
4.類的內部能夠經過self或者static關鍵字訪問自身靜態成員
5.能夠經過parent關鍵字訪問父類的靜態成員
6.能夠經過類的名稱在類定義外部訪問靜態成員
5.Final成員
子類沒法修改 final public function(){}
6.數據訪問
用parent關鍵字能夠訪問父類中被子類重寫的方法
self訪問自身的成員方法,也能夠訪問自身的靜態成員和類常量;但不能訪問類自身的非靜態屬性;使用常量時不須要再常量名稱前面添加$符
7.接口
把不一樣類的共同行爲定義,在不一樣類裏面實現不一樣的功能
定義:interface 名字
接口裏面的方法不須要有方法的實現
實現:class 類名 implements 接口名
interface 關鍵字用於定義接口
implements 關鍵字用於表示類實現某個接口
不能實例化接口
instanceof判斷某個對象是否實現了某個接口($obj instanceof abc)
interface 接口 extends 接口 接口繼承接口
某個類實現了某個接口和繼承某個類的區別
實現接口跟繼承類很相似,可是接口不能直接建立本身的對象
繼承的父類必須有該方法的具體實現,子類能夠重寫父類的方法,也能夠不重寫
接口裏面的方法是不須要具體實現的,只要定義了方法的名稱和參數就能夠了,具體的實現必須在實現類中定義
8.多態
由於接口的實現能夠有不少,因此對於接口裏面定義的方法的具體實現是多種多樣的,這種方法咱們稱爲多態
9.抽象類
接口裏面的方法是沒有實現的,而類裏面的方法都是有實現的
abstract關鍵字用於定義抽象類
在抽象方法前面添加abstract 關鍵字能夠標明這個方法是抽象方法不須要具體的實現
抽象類中能夠包含普通的方法,有方法的具體實現
繼承抽象類的關鍵字是extends
繼承抽象類的子類須要實現抽象類中定義的抽象方法
10.魔術方法
__tostring()當對象被當作string使用時,這個方法會被自動調用
__invoke()當對象被當成方法調用時,這個方法會被自動調用
__call()當對象訪問不存在的方法名稱是,__call($name,$arguments)方法會被自動調用(overloading)第一個參數是調用方法的名稱,第二個參數是方法調用的參數組成的數組
__callStatic()當對象訪問不存在的方法名稱時,__callStatic()方法會被自動調用(overloading)
--set()在給不可訪問屬性賦值時,__set()被調用(屬性重載的魔術方法)
__get()讀取不可訪問屬性的值時,__get()被調用(屬性重載的魔術方法)
__isset()當對不可訪問屬性調用isset()或empty()時,__isset()被調用(屬性重載的魔術方法)
__unset()黨對不可訪問屬性調用unset()時,__unset()被調用(屬性重載的魔術方法)
所謂不可訪問屬性,實際上就是在調用某個屬性時發現這個屬性沒有被定義,這時候不一樣的操縱會觸發不一樣的魔術方法
__clone()複製;對本來的沒有影響
編程