php物件導向之二 封裝性

2022-03-26 12:32:54 字數 1770 閱讀 6607

具體概念講出來,感覺也不知道說的是什麼.其實就是

在類的成員屬性和成員方法前面,加上類似public protected private 的修飾符

目的:盡量地隱藏物件的內部細節,達到訪問控制.[不是拒絕訪問]. (對外形成乙個屏障,只保留有限的對外介面與外部發生聯絡.)

2.封裝的原則:

物件對外的部分不能夠隨意訪問物件的內部資料(成員屬性和成員方法),從而有效地避免了外部錯誤對它的"交叉感染",使軟體錯誤能夠區域性化,大大減小查錯和排錯的難度.

3.修飾符public protected private

public :公有的,預設的  protected  :受保護的 private :私有的

4.訪問範圍

是否可以訪問對應的屬性和方法

public

protected

private

類的外部√×

×類的內部√√

√①類的外部只有公有屬性和方法才可以訪問.

②其他屬性和方法可以在類的內部宣告公有方法間接地進行訪問.

③在類的內部可以訪問公有,私有,受保護的屬性和方法.

④在類的內部不可以訪問私有和受保護的屬性和方法.

如果成員方法沒有任何訪問控制符,預設是public的,在任何地方都可以訪問.(在物件外部就可以公有方法作為訪問介面,間接地訪問物件的內部細節).

引出這幾個魔術方法,首先要說一下,構造方法__construct()沒有加關鍵字修飾,是公有方法(構造方法不要設定成私有的許可權)使用者可以使用構造方法在例項化物件後為私有屬性賦初始值.

但是,我們已經例項化物件,在程式執行過程中想要對私有屬性進行賦值操作.有兩種方法

(1).在類的內部設定公有方法,專門來提供賦值,取值介面

class person    

//賦值方法

public function setvalue($name)

public function getvalue()

}//例項化

$mod = new person();

結果是:  紫藤

$mod->setvalue('寶強');

$mod->getvalue();

結果是:寶強

(2)魔術方法__set(),__get(),__isset(),__unset()

如果像上面的每次都要去設定公有方法,很繁瑣.在php5.1.0之後的版本中,預定義了__set(),__get(),用來完成對所有非公有屬性都能獲取和複製的操作.

__set($propertyname,$propertyvalue)

有兩個引數,屬性名  和   屬性值,在給非公有屬性賦值時,會自動呼叫此方法(就是說在類中必須宣告__set())   (**後面補充)

__get($propertyname)在獲取非公有屬性的值時,會自動呼叫此方法.

檢測非公有屬性是否存在__isset(),刪除乙個物件的非公有屬性__unset().為了防止使用者主動呼叫這兩個方法,要使用private關鍵字封裝在物件中.

__isset($propertyname)檢測非公有屬性是否存.(這是乙個輔助檢測函式,沒有檢測功能),還要在外部呼叫isset()函式時,才會自動呼叫此方法.

__unset($propertyname)刪除乙個物件的非公有屬性_,要在外部呼叫unset()函式時,才會自動呼叫此方法.

java物件導向(二) 封裝

參考形象例子 封裝把不需要暴露的成員變數隱藏起來,對外進行合理的暴露,這樣做的目的是保證業務的安全性。1.通過關鍵字private來修飾成員變數。被private修飾的成員變數,只能在本類當中訪問 2.如果想要對外開放,通過public設定對應的方法,如getter和setter方法。public ...

Javascript 物件導向(二)封裝

寫個小例子 第一步 做乙個 手機的類 var mobilephone function 第二步 考慮這個類,裡需要那些類的私有屬性,這裡我想定義的是例項出來手機的數量 var mobilephone function 第三步 建立乙個建構函式,即例項時候,對產生的新象的乙個初始化,例如屬性,方法的初...

物件導向系列二(封裝)

僅僅須要最簡單的操作就能實現一系列複雜的功能。是做乙個個技術攻克的目的。一台精密儀器,一架家用電器,乙個小公尺手機,這些可能我們都在用,或者用過。它們的內部都無比的複雜。使用了各種各樣的配件,運用了極多的原理和知識。我們在使用的時候都具有同樣的感受 簡單 方便 太好了!面對原本複雜的東西,我們卻能通...