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

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

成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比東西湖網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式東西湖網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋東西湖地區(qū)。費(fèi)用合理售后完善,10多年實(shí)體公司更值得信賴。

區(qū)別:1、抽象類可以有屬性、普通方法、抽象方法,但接口不能有屬性、普通方法、可以有常量;2、抽象類用abstract關(guān)鍵字在類前聲明,且有class聲明為類,接口是用interface來聲明,但不能用class來聲明,因?yàn)榻涌诓皇穷悺?/p>

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

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

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

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

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

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

3、語法上有不同

4、抽象類用abstract關(guān)鍵字在類前聲明,且有class聲明為類,接口是用interface來聲明,但不能用class來聲明,因?yàn)榻涌诓皇穷悺?/p>

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

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

抽象類:

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

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

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

abstract class ShopProductWriter
{
    protected $product = [];

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

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

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

接口:

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

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

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

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

class ShopProduct implements Price
{
    protected $price;

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

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

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

網(wǎng)站題目:php中抽象類與接口有哪些區(qū)別
當(dāng)前網(wǎng)址:http://bm7419.com/article46/psdieg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站建站公司、網(wǎng)站收錄、關(guān)鍵詞優(yōu)化、品牌網(wǎng)站建設(shè)搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站