首頁 >後端開發 >PHP問題 >php中抽象類別與介面的差別是什麼

php中抽象類別與介面的差別是什麼

青灯夜游
青灯夜游原創
2020-10-30 16:47:432999瀏覽

區別:1、抽象類別可以有屬性、普通方法、抽象方法,但介面不能有屬性、普通方法、可以有常數;2、抽象類別用abstract關鍵字在類別前聲明,且有class聲明為類,介面是用interface來聲明,但不能用class來聲明,因為介面不是類。

php中抽象類別與介面的差別是什麼

推薦:《PHP視訊教學

對於物件導向開發,抽象類別與介面這兩個東西是比較難理解的。以下這篇文章跟大家介紹一下php中抽象類別與介面之間的差異。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

抽象類別:是基於類別來說,其本身就是類,只是一種特殊的類,不能直接實例,可以在類別裡定義方法,屬性。類似模版,規範後讓子類別實作詳細功能。

介面:主要基於方法的規範,有點像抽象類別裡的抽象方法,只是其相對於抽象方法來說,更獨立。可讓某個類別透過組合多個方法來形成新的類別。

php中抽象類別與介面的差異

1、抽象類別可以有屬性、普通方法、抽象方法,但介面不能有屬性、普通方法、可以有常數

2、抽象類別內未必有抽象方法,但介面內一定會有「抽象」方法

3、語法上有不同

4、抽象類用abstract關鍵字在類別前聲明,且有class聲明為類,介面是用interface來聲明,但不能用class來聲明,因為介面不是類別。

5、抽象類別的抽象方法一定要用abstract來聲明,而介面則不需要

6、抽象類別是用extends關鍵字讓子類別繼承父類別後,在子類別實作詳細的抽象方法。而介面則是用implements讓普通類別在類別裡實作介面的詳細方法,且介面可以一次實作多個方法,用逗號分開各個介面就可

抽象類別:

  • 抽象類別無法被實例化,它的作用是為所有繼承自它的類別定義(或部分實作)介面。

  • 使用 abstract 關鍵字定義抽象類別。

  • 可以像在普通類別中那樣在抽象類別中建立方法和屬性,在大多數情況下,一個抽象類別至少包含一個抽象方法,抽象方法也是透過abstract 關鍵字聲明的。抽象方法只有方法聲明,沒有方法實作。不能編寫方法體。

abstract class ShopProductWriter
{
    protected $product = [];

    /**
     * 抽象类中可以定义普通方法
     */
    public function addProduct($shopProduct)
    {
        $this->product = $shopProduct;
    }

    /**
     * 定义一个抽象方法,只有方法声明,没有方法实现
     */
    abstract public function write();
}
  • 任何繼承自抽象類別的類別都必須實作所有的抽象方法,否則它本身就必須被定義為抽象類別。子類別不能僅僅實作抽象方法,還必須遵守方法簽名。這意味著實現方法的存取控制不能比抽象方法更嚴格。實作方法還需要有與抽象方法相同數量的參數,以及相同的型別提示。

class XmlProductWriter extends ShopProductWriter
{
    /**
     * 任何继承自抽象类的类都必须实现所有的抽象方法
     */
    public function write()
    {
        echo 'XmlProductWriter';
    }
}

介面:

  • #抽象類別允許我們提供一些實現,但介面則是純粹的模板。介面只定義功能,不能有實作。可以有屬性和方法的聲明,但不能有方法體。

  • 使用 interface 關鍵字宣告介面。

interface Price
{
    /**
     * 只有方法声明,没有方法实现
     */
    public function getPrice();
}
  • 任何實作該介面的類別都必須實作這個介面定義的所有方法,否則這個類別就只能宣告為抽象類別。

  • 可以在類別的聲明中使用 implements 關鍵字讓它實作介面。

class ShopProduct implements Price
{
    protected $price;

    public function getPrice()
    {
        // TODO: Implement getPrice() method.
        return $this->price;
    }
}
  • 一個實作類別與它所實作的介面具有相同的型別。

  • 一個類別可以在繼承一個父類別的同時實作多個接口,implements 關鍵字後面跟著多個接口的名字,它們之間由逗號分隔開來。

相關推薦:php培訓

以上是php中抽象類別與介面的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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