1. 程式人生 > >面向對象的封裝

面向對象的封裝

private

面向對象的封裝

private 私有的 私有的屬性不能直接在外面訪問

protected 受保護的 受保護的屬性 不能直接在外面訪問

__set($key,$value) $key--->沒有權限賦值的屬性名 $value 沒有權限賦值的屬性值

給一個沒有權限訪問的屬性賦值的時候自動調用

__get($key) $key----->沒有權限訪問的屬性名

訪問一個沒有權限的屬性的時候自動調用


public

protected

private

自己

Y

Y

Y

家族

Y

Y

N

外部

Y

N

N

面向對象的封裝

//public 自己 家族 外部 都可以訪問

//protected 自己 家族 可以訪問

//private 只有自己可以訪問

三、魔術方法(自動調用)

__construct() 在使用new關鍵字得到對象的是自動調用

__destruct() 在對象銷毀的時候 自動調用

__get() 在訪問一個沒有權限的屬性的時候自動調用

__set()在沒有權限賦值的時候自動調用

__isset() 在沒有權限使用isset函數判斷屬性的時候自動調用

__unset() 在沒有權限使用unset函數銷毀屬性的時候自動調用

面向對象的繼承

一、目標:

清除重復代碼

二、實現:

1. 將重復代碼提取出來

2. 建立聯系 extends 關鍵字 詞義是擴展 用於繼承

三、什麽是父類 和子類

被繼承的類 成為父類(基類

)

繼承其他類的類 成為 子類 (派生類)

四、繼承的特性(重點重點)

a) php只支持單繼承 只能有一個爹

b) php可以被多個繼承 一個爹可以有多個兒子

c) php支持多層繼承 可以有祖孫關系

B繼承AC繼承B ,那麽C裏面就有ABC三個類裏面的所有內容

d) 子類會擁有父類中的所有內容但是有部分內容無法訪問(封裝)

五、屬性繼承(重寫 重構)

1. 子類裏面的屬性會覆蓋父類中的同名屬性

2. 訪問屬性的時候一定是最終結果(被子類覆蓋的結果,除了私有的)

3. 權限只能擴大 不能縮小

父類

子類

public

public

protected

public protected

private

public protected private

六、方法繼承(重寫 重構)

1. 子類裏面的方法會覆蓋父類中的同名方法

2. 訪問方法的時候一定是最終的結果(被子類覆蓋之後的結果 除了私有的)

3. 重寫的時候 參數結構(參數個數 和參數是否有默認值)建議保持一致

4. 權限只能擴大 不能縮小

父類

子類

public

public

protected

public protected

private

public protected private

5. 可以調用父類中的方法 需要使用範圍操作符

:: A::say() parent::say()

parent 代表的是父類

要求: 重寫構造方法的時候 務必在第一行調用父類中的構造方法

七、關鍵字

1. final (最終的)(掌握)

final 可以修飾類和方法

被修飾的類不能被繼承

被修飾的方法不能重寫

2. static

a) 可以修飾屬性和方法 不能修飾類

b) 靜態成員需要使用範圍操作符來訪問 A::$name 如果你訪問的是靜態屬性一定要加上$ A::say()

c) 靜態的成員方法裏面不能出現非靜態內容 $this 和非靜態成員

d) 靜態方法裏面只能使用靜態屬性

3. const

可以在類裏面定義常量

值保留類裏面的屬性默認值特性

類裏面定義的常量 需要使用範圍操作符類訪問

A::DB B::DB

4. define

不能在類裏面定義常量

5. 運算符 instanceof

判斷前面的這個對象是否是後面這個類的實例

祖輩關系都行



面向對象的封裝