PHP中oop物件導向基礎知識(一)

來源:互聯網
上載者:User

標籤:沒有   如何   設定   處理   類的建構函式   false   寫法   存取修飾詞   其他   

                                                                                    OOP 基礎知識匯總(一)

>>>你需要瞭解以下概念
物件導向&面向過程概念:
    面向過程:專註於解決一個問題的過程。面向過程的最大特點,是由一個一個的函數去解決處理這個問題的一系列過程。
    物件導向:專註於由哪個對象來處理一個問題。物件導向的最大特點,是有一個個具有屬性和功能的類,從類中拿到對象,進而處理問題。


【物件導向】

 1、什麼是類?
     具有相同屬性(特徵)和方法(行為)的一系列個體的集合,類是一個抽象的概念
 2、什麼是對象?
     從類中,拿到的具有具體屬性值的個體,稱為對象。對象是一個具體的個體。
     例如:人類,都有姓名、性別、年齡,但是這些屬性都不能有具體的值。
              張三,是人類中的一個對象!姓名張三、性別男、年齡23,將類的每一個屬性具體賦值後,就成了張三這個對象。

 3、類和對象的關係?
    類是對象的抽象化!對象是類的具體化!
  類僅僅表明這類對象有哪些屬性,但是不能有具體的值,所以類是抽象的。
  而對象,是將類的所有屬性賦值後,產生的具體的個體,所有對象是具體的。

類的聲明與執行個體化:  

1、如何聲明一個類:

     class 類名{

             存取修飾詞 $屬性[=預設值];
             [存取修飾詞] function 方法(){}
      }
     
2、聲明一個類的注意事項:
  ① 類名只能有字母數字底線組成、開頭不能是數字,必須符合大駝峰法則;
  ② 類名必須使用class修飾,類名後面一定不能有();
  ③ 屬性必須要帶存取修飾詞,方法可以不帶存取修飾詞;

3、執行個體化對象及對象屬性方法的調用?
   $對象名 = new 類名(); //()可以不帶

類外部調用屬性和方法:
   $對象名 -> 屬性名稱; // 使用->調用屬性時,屬性名稱不能帶$
類內部調用屬性和方法:
  $this -> 屬性名稱;

建構函式:
1、什麼是建構函式?
   建構函式是類中的一個特殊函數,當我們使用new關鍵字執行個體化對象時,相當於調用了類的建構函式;
2、建構函式有什麼作用?
     執行個體化對象時,自動調用,用於給對象的屬性賦初值!
3、建構函式的寫法?
    ① 建構函式名,必須與類同名
    [public] function Person($name){
        $this -> name = $name;
    }
    ② 使用魔術方法__construct
        [public] function __construct($name=""){
        $this -> name = $name;
    }

 4、建構函式注意事項:

   ① 第一種寫法,建構函式名必須與類同名!!!!!!
   ② 如果一個類沒有手寫建構函式,則系統預設會有一個空參構造,因此可以使用new Person();
       如果我們寫了帶參數的建構函式,則將不會再有空參構造,也就是不能直接使用new Person(); Person後面的()中的參數列表,必須符合建構函式的要求!!!
   ③ 如果兩種建構函式同時存在,將使用__construct。


 5、解構函式:__destruct():
     ① 解構函式在對象被銷毀釋放之前自動調用!
     ② 解構函式不能帶有任何的參數
     ③ 解構函式常用於對象使用完以後,釋放資源、關閉資源等!

6、魔術方法:
     PHP中,給我們提供一系列用__開頭的函數,這些函數無需自己手動調用,會在合適的時機自動調用,這類函數稱為魔術函數。
    例如:function __construct(){} 在類new一個對象時自動調用
    function __destruct(){} 在對象被銷毀時自動調用
   我們要求,除了魔術方法之外,自訂的函數與方法不能使用__開頭。


    最後,一般對於功能比較複雜的類,我們會單獨的寫到一個類檔案中。
    類檔案的命名,統一小寫,使用“類名小寫.class.php”的方式命名。
    在其他檔案中使用這個類時,可以用include匯入這個.class.php檔案

封裝的基本概念

 1、什麼是封裝?
通過存取修飾詞,將類中不需要外部存取的屬性和方法進行私人化處理,以實現存取控制。
 注意:是實現存取控制,而不是拒絕訪問。 也就是說,我們私人化屬性之後,需要提供對應的方法,讓使用者通過我們提供的方法處理屬性。

 2、封裝的作用?
   ① 使用者只關心類能夠提供的功能,而不必關心功能實現的細節!(封裝方法)
   ② 對使用者的資料進行控制,防止設定不合法資料,控制返回給使用者的資料(屬性封裝+set/get方法)
 3、實現封裝操作?
   ① 方法的封裝
     對於一些只在類內部使用的方法,而不像對外部提供使用。那麼,這樣的方法我們可以使用private進行私人化處理。
    private function formatName(){} //這個方法僅僅能在類內部使用$this調用
    function showName(){
      $this -> formatName();
          }

② 屬性的封裝+set/get方法  為了控制屬性的設定以及讀取,可以將屬性進行私人化處理,並要求使用者通過我們提供的set/get方法進行設定

 private $age;
   function setAge($age){
       $this->age = $age;
   }
   function getAge(){
       return $this->age;
   }
 $對象 -> getAge();
 $對象 -> setAge(12);

③ 屬性的封裝+魔術方法
   private $age;
   function __get($key){
       return $this->$key;
   }
 function __set($key,$value){
      $this->$key=$value;
}
 $對象->age; // 訪問對象私人屬性時,自動調用__get()魔術方法,並且將訪問的屬性名稱傳給__get()方法;
 $對象->age=12; // 設定對象私人屬性時,自動調用__set()魔術方法,並且將設定的屬性名稱以及屬性值傳給__set()方法;

 注意:在魔術方法中,可以使用分支結構,判斷$key的不同,進行不同操作。

4、關於封裝的魔術方法:
 ① __set($key,$value):給類私人屬性賦值時自動調用,調用時給方法傳遞兩個參數:需要設定的屬性名稱、屬性值;
 ② __get($key):讀取類私人屬性時自動調用,調用時給方法傳遞一個參數:需要讀取的屬性名稱;
 ③ __isset($key):外部使用isset()函數檢測私人屬性時,自動調用。
   >>> 類外部使用isset();檢測私人屬性,預設是檢測不到的。false
   >>> 所以,我們可以使用__isset();函數,在自動調用時,返回內部檢測結果。
   function __isset($key){
      return isset($this->$key);
   }
 當外部使用isset($對象名->私人屬性);檢測時,將自動調用上述__isset()返回的結果!
 ④ __unset($key):外部使用unset()函數刪除私人屬性時,自動調用;
   function __unset($key){
   unset($this->$key);
    }
 當外部使用unset($對象名->私人屬性);刪除屬性時,自動將屬性名稱傳給__unset(),並交由這個魔術方法處理。

未完待續   》》》》》》

 

 

 

  

PHP中oop物件導向基礎知識(一)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.