首頁  >  文章  >  php教程  >  php物件導向之二-封裝性

php物件導向之二-封裝性

WBOY
WBOY原創
2016-12-05 13:26:271221瀏覽

1.封裝:

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

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

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

2.封裝的原則:

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

3.修飾符public protected private

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

4.訪問範圍


是否可以存取對應的屬性和方法

 

         public       protected       private
類的外部           √            ×            ×
類的內部           √           √           √

 

 

 

 

 

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

②其他屬性和方法可以在類別的內部聲明公有方法間接地進行存取.

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

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

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

5.關於封裝中的幾個常用魔術方法__set(),__get(),__isset(),__unset()

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

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

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

 

class Person{
    private $name="紫藤";
    
    public function __construct(){
        echo $this->name;
    }    
    
    //赋值方法
     public function setvalue($name){
           $this->name=$name;          
     }
      public function getvalue(){
           echo $this->name;       
     }
}

//实例化
$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()函數時,才會自動呼叫此方法.

 

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn