溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

php中抽象類與接口有哪些區(qū)別

發(fā)布時間:2020-11-02 10:31:26 來源:億速云 閱讀:147 作者:小新 欄目:編程語言

php中抽象類與接口有哪些區(qū)別?這個問題可能是我們?nèi)粘W習或工作經(jīng)常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純?nèi)容,讓我們一起來看看吧!

區(qū)別:1、抽象類可以有屬性、普通方法、抽象方法,但接口不能有屬性、普通方法、可以有常量;2、抽象類用abstract關(guān)鍵字在類前聲明,且有class聲明為類,接口是用interface來聲明,但不能用class來聲明,因為接口不是類。

對于面向?qū)ο箝_發(fā),抽象類與接口這兩個東西是比較難理解的。下面本篇文章給大家介紹一下php中抽象類與接口之間的區(qū)別。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有所幫助。

抽象類:是基于類來說,其本身就是類,只是一種特殊的類,不能直接實例,可以在類里定義方法,屬性。類似于模版,規(guī)范后讓子類實現(xiàn)詳細功能。

接口:主要基于方法的規(guī)范,有點像抽象類里的抽象方法,只是其相對于抽象方法來說,更加獨立??勺屇硞€類通過組合多個方法來形成新的類。

php中抽象類與接口的區(qū)別

1、抽象類可以有屬性、普通方法、抽象方法,但接口不能有屬性、普通方法、可以有常量

2、抽象類內(nèi)未必有抽象方法,但接口內(nèi)一定會有“抽象”方法

3、語法上有不同

4、抽象類用abstract關(guān)鍵字在類前聲明,且有class聲明為類,接口是用interface來聲明,但不能用class來聲明,因為接口不是類。

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

6、抽象類是用extends關(guān)鍵字讓子類繼承父類后,在子類實現(xiàn)詳細的抽象方法。而接口則是用implements讓普通類在類里實現(xiàn)接口的詳細方法,且接口可以一次性實現(xiàn)多個方法,用逗號分開各個接口就可

抽象類:

  • 抽象類無法被實例化,它的作用是為所有繼承自它的類定義(或部分實現(xiàn))接口。

  • 使用 abstract 關(guān)鍵字定義抽象類。

  • 可以像在普通類中那樣在抽象類中創(chuàng)建方法和屬性,在大多數(shù)情況下,一個抽象類至少包含一個抽象方法,抽象方法也是通過 abstract 關(guān)鍵字聲明的。抽象方法只有方法聲明,沒有方法實現(xiàn)。不能編寫方法體。

abstract class ShopProductWriter
{
    protected $product = [];

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

    /**
     * 定義一個抽象方法,只有方法聲明,沒有方法實現(xiàn)
     */
    abstract public function write();
}
  • 任何繼承自抽象類的類都必須實現(xiàn)所有的抽象方法,否則它自己就必須被定義為抽象類。子類不能僅僅實現(xiàn)抽象方法,還必須遵守方法簽名。這意味著實現(xiàn)方法的訪問控制不能比抽象方法更嚴格。實現(xiàn)方法還需要有與抽象方法相同數(shù)量的參數(shù),以及相同的類型提示。

class XmlProductWriter extends ShopProductWriter
{
    /**
     * 任何繼承自抽象類的類都必須實現(xiàn)所有的抽象方法
     */
    public function write()
    {
        echo 'XmlProductWriter';
    }
}

接口:

  • 抽象類允許我們提供一些實現(xiàn),但接口則是純粹的模板。接口只定義功能,不能有實現(xiàn)??梢杂袑傩院头椒ǖ穆暶鳎荒苡蟹椒w。

  • 使用 interface 關(guān)鍵字聲明接口。

interface Price
{
    /**
     * 只有方法聲明,沒有方法實現(xiàn)
     */
    public function getPrice();
}
  • 任何實現(xiàn)該接口的類都必須實現(xiàn)這個接口定義的所有方法,否則這個類就只能被聲明為抽象類。

  • 可以在類的聲明中使用 implements 關(guān)鍵字讓它實現(xiàn)接口。

class ShopProduct implements Price
{
    protected $price;

    public function getPrice()
    {
        // TODO: Implement getPrice() method.
        return $this->price;
    }
}
  • 一個實現(xiàn)類與它所實現(xiàn)的接口具有相同的類型。

  • 一個類可以在繼承一個父類的同時實現(xiàn)多個接口,implements 關(guān)鍵字后面跟著多個接口的名字,它們之間由逗號分隔開來。

感謝各位的閱讀!看完上述內(nèi)容,你們對php中抽象類與接口有哪些區(qū)別大概了解了嗎?希望文章內(nèi)容對大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI