PHP 物件導向基礎

來源:互聯網
上載者:User

標籤:通過   const   魔術   耦合   load   lstat   結束   返回   vat   

 

本文主要闡述物件導向的基本概念,如有問題,還請斧正。

首先說明,涉及的一些知識點,算是提綱吧 。

 1 類的基本概念;2 對象的基本概念;3 存取控制;4 建構函式,解構函式;5魔術方法;6 介面;7 多態;8 封裝;9繼承;10 static與final

 

一,類的基本概念

        1 什麼是類? 類即擁有相同屬性和行為的一個集合體。舉個例子 ,我們日常生活中的車 是一個類,車擁有相同的屬性(顏色,大小,重量)和行為(行駛);又如動物也是一個類,動物擁有相同的屬性(大小)和行為(吃,喝);我們將這些擁有相同的屬性和行為的一些事物叫做一個類。

        2 在程式中如何申明一個類,用關鍵字 class  例


class Person{    //  屬性;   //   行為;}
  在這裡我們申明了一個人類

二 ,對象的基本概念

        1 什麼是對象?  對象即是一個具體的事物,也或者是一個抽象的事物,對象時從類執行個體化而來。例: 上面我們說車是一個類,那麼寶馬,平治等就是對象,總結一句,對象就是將類具體化了。

        2 對象的兩個部分

              (1)對象的組成元素,是對象的資料模型,用於描述對象的資料,又別稱為屬性;

              (2)對象的行為,對象的行為模型,用於描述對象具體能做什麼事情,又被稱為方法;

        3 對象的兩個特徵

              (1)高內聚, 即在對象的內部屬性和方法對內是可見,在對象的內部屬性和方法都是可以被修改和訪問的;

              (2)低耦合  ,  在對象的外部,我們只能看見一部分的方法和屬性;涉及到存取控制,後文在述。

       4 如何執行個體化一個對象,用關鍵字 new   上面我們申明了一個人類,現在我們將這個人類  執行個體化。

  執行個體化一個張三的對象

$zhangsan = new Person();

 

  三 , 存取控制 :主要用修飾符public  protected private 來控制訪問的許可權; 例

class Person{        public       $name;  //公有的,可以被任何訪問     protected    $sex;   // 受保護的,可以被自身和子類訪問     private      $age;  // 私人的,只能被自己訪問}

 

 

    

 四,  建構函式,和解構函式

     1  建構函式 ,建構函式為類中的一個方法,當我們執行個體化這個類的時候 自動調用,建構函式的目的是為了完成一些初始化的工作。用__construct 例

class Person{        public       $name;  //公有的,可以被任何訪問     protected    $sex;   // 受保護的,可以被自身和子類訪問     private      $age;  // 私人的,只能被自己訪問        //當我們new這個類時 自動調用     public  function __construct(){       echo "你好"; }}

 

      2 解構函式  ,當對象被銷毀的時候自動調用,我們常用解構函式來銷毀變數,以達到釋放記憶體的 目的。 用 __desturct  寫法同上。 

五, 魔術方法,原理和建構函式差不多,在特定的情況下自動調用。

  1.     __tostring    當對象被作為字串使用時,自動調用,返回字串;
  2.     __invote       當對象被作為方法使用時,自動調用;
  3.     __call           當對象訪問不存在的方法或者未公開的方法是,自動調用,返回被調用的函數名,和參數數組;
  4.     __callStatic  當對象訪問不存在的靜態方法,或者未公開的時候自動調用,返回調用函數名,和參數數組;
  5.     __get           對象訪問不可訪問的屬性時候,自動調用,返回不可訪問的屬性名稱;
  6.     __set           給不可訪問的屬性賦值時,自動調用,返回屬性名稱,和賦值參數;
  7.     __isset        用isset()/empty()檢測不可訪問的屬性時,自動調用,返回檢測的屬性名稱;
  8.     __unset      用unset()刪除不可訪問的屬性時,自動調用,返回刪除屬性名稱;
  9.     __clone      使用clone關鍵字複製對象時,自動調用,作用是為新的複製對象賦初始值;
  10.     __sleep      對象序列化時,自動調用,返回一個數組,數組中的值就是可以序列化的屬性;
  11.     __wakeup  對象還原序列化時,自動調用,為還原序列化新產生的對象,賦初始值;
  12.     __autoload   需要在內外部聲明函數。當執行個體一個未申明的類時,自動調用,傳遞執行個體化的類名,可以使用類名自動載入對應的類檔案;

六,介面  

      1  什麼是介面?  介面提供了一組實現介面的類    必須實現的方法組合  ,介面裡面的方法沒有方法體(具體的執行代碼)介面裡面的方法都是抽象方法。

      2   如何聲明一個介面   例:

interface Inter {    public function eat(); //沒有具體的方法體    public function run();   }

 

   3  當一個類去實現一個介面的時候 必須實現介面裡面的方法,除非這個類時抽象類別 例 

 

 // 申明一個介面interface Inter {    public  funtion eat();    public  funtion run();}//一個類去實現介面class  Person implements Inter{     //這個類必須去實現介面中的方法   public  function eat(){     //具體的方法}   public function run (){    //具體的方法}}

 

  4  介面可以被繼承,用關鍵字extends   寫法   interface inter1 extends Inter {  } inter1介面繼承了Inter介面,介面的繼承可以是一對多,即一個介面可以繼承多個父介面。注意:當一個類去實現了一個子介面的時候,它也必須實現父介面裡面的抽象方法。

七 ,多態

    1  多態是一種現象,當一個類被多個子類所繼承,如果這個類中的方法在子類中表現出了不同的功能,我們稱這種現象為多態;

八 ,封裝

    1  封裝 通過存取修飾詞 將類中不需要外部存取的屬性和方法進行私人化處理,實現存取控制,讓使用者只能通過我們提供的方法對屬性和方法進行訪問。

    2  封裝的好處,可以重複調用避免了代碼的冗餘。

九 ,繼承   類可以被繼承,子類擁有父類的屬性和方法,子類可以修改父類的成員,我們稱之為重寫,當子類 重寫父類的方法後,按照子類的方法運行  通過關鍵字extends 實現繼承

  例子  

//聲明一個類class Person{       $name;       public  function say(){       echo $this->name."今天天氣不錯哦"//$this php中的偽變數,代表自身對象我們在類內部訪問屬性時一般用$this  }}//繼承一個類class Man extends Person{      //將父類的say方法重寫     public function say(){       echo  "晚飯吃什嗎?" }
}

 

十, 關鍵字 final 和static

    1  final   php5中引入關鍵字final  當用final 修飾類的時候這個類可以理解為最終類,這個類不能被繼承;當用final修飾方法時,這個方法可以就理解為最終方法,不能夠被重寫。

    2 static  靜態成員   //用static 修飾的屬性和方法被稱為靜態屬性和靜態方法

        (1)靜態屬性儲存了公有的資料;

        (2)靜態方法只能訪問靜態屬性;

        (3)靜態成員不要要執行個體化就可以訪問,

        (4)靜態方法不能夠去調用非靜態成員,然而非靜態方法則可以調用靜態成員,因為靜態成員在載入的時候已經產生,而非靜態成員此時沒有執行個體化誕生。

        (5)如何訪問?  在類內部訪問 用 self 或者static訪問  格式 :  self/static::$屬性名稱 ;    parent::$屬性名稱訪問父類屬性  在類外部調用 :  類名::$屬性。

 

結束語   :以上是關於物件導向編程的一些基本概念,以後閑的時候在弄些其他東西,話說這是在下的第一篇部落格,

2018-09-02    21:39:26

PHP 物件導向基礎

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.