具體概念講出來,感覺也不知道說的是什麼.其實就是
在類的成員屬性和成員方法前面,加上類似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 第三步 建立乙個建構函式,即例項時候,對產生的新象的乙個初始化,例如屬性,方法的初...
物件導向系列二(封裝)
僅僅須要最簡單的操作就能實現一系列複雜的功能。是做乙個個技術攻克的目的。一台精密儀器,一架家用電器,乙個小公尺手機,這些可能我們都在用,或者用過。它們的內部都無比的複雜。使用了各種各樣的配件,運用了極多的原理和知識。我們在使用的時候都具有同樣的感受 簡單 方便 太好了!面對原本複雜的東西,我們卻能通...