無論物件導向或物件導向過程, 這兩個都是解決問題的思路而已, 只是角度不同.
# 導向過程:
強調解決問題的每一個步驟都親力親為,每一個細節都自己手動實現.
面向對象:
#使用特定功能對象去解決特定的問題, 每一個細節不需要關注,只需要創建對應的物件即可.
物件導向是基於過程導向的
類別和物件及他們的關係
# 類別: 具有相同特徵和行為(功能)的事物的統稱, 是一個抽象概念
物件: 這類事物中某個確定的個體
類別和物件的關係
一個類別可以建立多個物件, 類別是物件的抽象, 物件是類別的實例.
描述一個事物----> 類別
特徵----> 成員屬性(成員變數)
行為(功能)---> 成員方法
類別的建立格式:
修飾符 class 類位元{
資料型別 成員變項名稱1;
資料型別 成員變項名稱2;
資料型別 成員變項名稱3;
...
# 成員法1 ;
成員方法2;
成員方法3;
...
}
修飾符: public
類別名稱: 識別碼見名知意
#成員變數列表: 事物的特徵,只寫當前場景關注的特徵,沒必要把事物的所有特徵全都寫上. 寫法類似於定義變數
成員方法: 事物的行為(功能) 只寫當前場景關注的行為(特徵) 寫法上類似於先前的定義方法, 差別在於此時寫的話要去掉static
當一個類別第一次使用的時候要載入到方法區, 後續每一次再使用這個類別就不需要重複載入
成員變數和局部變數差異
1.定義的位置不同
局部變數: 定義在方法的內部
成員變數: 定義在類別的內部, 方法的外部
2.在記憶體中的存放位置不同
局部變數: 局部變數存放在堆疊區
成員變數: 成員變數存放在堆疊區域
3 .生命週期不同
局部變數: 隨著方法的呼叫而產生,隨著方法的結束而消失 相對較短
成員變數: 隨著物件創建而產生,隨著物件資料回收而消失 相對較長
4.初始值不同
局部變數: 沒有初始值, 使用之前必須進行賦值
成員變數: 有初始值, 引用類型null, 整數0 , 小數0.0 字元:空格, 布林false
封裝性愛
封裝是物件導向的三大特徵之一, 另外兩個是繼承 多型
類別名稱:Person
屬性:name ,age
方法:展示
封裝好處: 提高程式的安全性
對屬性封裝的步驟:
1 .使用private關鍵字修飾對應的屬性, 防止外界透過物件名稱.屬性的方式直接存取屬性
2.書寫對應屬性的set和get方法, 給外界一個存取屬性的通道
」封裝是物件導向程式語言對客觀世界的模擬,客觀世界裡成員變數都是隱藏在物件內部的,外界無法直接操作和修改。
封裝的原則:
將不需要對外提供的內容都隱藏起來。
把屬性隱藏,提供公共方法對其存取。
成員變數private,提供對應的getXxx()/setXxx()方法
好處:
透過方法控製成員變數的操作,提高了程式碼的安全性
把程式碼用方法封裝,提升了程式碼的複用性
變數存取的就近原則:
當出現多個重名變數的時候, 目標程式碼使用的是離這行程式碼最近的那個變數
this可以解決的問題:
當局部變數和成員變數重名的時候, 想在特定的程式碼處存取成員變數, 就可以在目標行的變數名稱前面加this.
this只的是目前呼叫這個方法的物件
this 誰呼叫指的是誰
建構方法
是一個方法. 作用: 給物件的資料賦值預設值
定義格式:
修飾符 方法名稱(參數清單){
# 若乾條初始化語句
}
修飾符: public
方法名稱: 直接寫類別名稱
參數列表: 跟之前定義方法寫形式參數一致
注意建構方法沒有回傳值類型
如果我們自己不手動寫無參數的建構方法, 系統會預設提供一個,如果我們自己手動書寫了無參的構造方法,
那系統就不會給提供,使用的時候直接使用我們自己寫的構造方法
構造方法也是方法也可以進行重載
但凡我們手寫了任意的構造方法, 系統就都不會給提供無參構造方法了,
當此時非要用無參的構造方法創建對象的時候, 必須自己手寫無參的建構方法
以上是物件導向內容詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!