程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php面向對象之二-封裝性,php面向對象封裝

php面向對象之二-封裝性,php面向對象封裝

編輯:關於PHP編程

php面向對象之二-封裝性,php面向對象封裝


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()函數時,才會自動調用此方法.

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved