1. 程式人生 > >PHP 面向對象基礎

PHP 面向對象基礎

出了 ack 控制 表現 什麽是 父類 析構函數 克隆對象 imp

本文主要闡述面向對象的基本概念,如有問題,還請斧正。

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

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 面向對象基礎