成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP中的 抽象類(abstract class)和 接口(interface)

awokezhou / 3216人閱讀

摘要:中的抽象類和接口有什么區(qū)別呢我們來看下具體的說明。而抽象類中抽象方法前則必須加上表示顯示聲明為抽象方法。抽象類不能被直接實(shí)例化。詳情請看原文中的抽象類和接口注本文為轉(zhuǎn)載,原文地址中的抽象類和接口

PHP中的 抽象類(abstract class)和 接口(interface)有什么區(qū)別呢?我們來看下具體的說明。

一、 抽象類和接口的異同 1.相同點(diǎn):

(1)兩者都是抽象類,都不能實(shí)例化。

(2)interface 實(shí)現(xiàn)類及 abstract class 的子類都必須要實(shí)現(xiàn)已經(jīng)聲明的抽象方法。

2.不同點(diǎn):

(1)、interface 需要實(shí)現(xiàn),要用 implements ,而 abstract class 需要繼承,要用 extends 。

(2)、一個類可以實(shí)現(xiàn)多個 interface ,但一個類只能繼承一個 abstract class 。

(3)、interface 強(qiáng)調(diào)特定功能的實(shí)現(xiàn),而 abstract class 強(qiáng)調(diào)所屬關(guān)系。

(4)、盡管 interface 實(shí)現(xiàn)類及 abstract class 的子類都必須要實(shí)現(xiàn)相應(yīng)的抽象方法,但實(shí)現(xiàn)的形式不同。

interface 中的每一個方法都是抽象方法,都只是聲明的 (declaration, 沒有方法體 ) ,實(shí)現(xiàn)類必須要實(shí)現(xiàn)。而 abstract class 的子類可以有選擇地實(shí)現(xiàn)。

這個選擇有兩點(diǎn)含義:
a) abstract class 中并非所有的方法都是抽象的,只有那些冠有 abstract 的方法才是抽象的,子類必須實(shí)現(xiàn)。那些沒有 abstract 的方法,在 abstract class 中必須定義方法體;
b) abstract class 的子類在繼承它時,對非抽象方法既可以直接繼承,也可以覆蓋;而對抽象方法,可以選擇實(shí)現(xiàn),也可以留給其子類來實(shí)現(xiàn),但此類必須也聲明為抽象類。既是抽象類,當(dāng)然也不能實(shí)例化。

(5)、abstract class 是 interface 與 class 的中介。 abstract class 在 interface 及 class 中起到了承上啟下的作用。一方面, abstract class 是抽象的,可以聲明抽象方法,以規(guī)范子類必須實(shí)現(xiàn)的功能;另一方面,它又可以定義缺省的方法體,供子類直接使用或覆蓋。另外,它還可以定義自己的實(shí)例變量,以供子類通過繼承來使用。

(6)、接口中的抽象方法前不用也不能加 abstract 關(guān)鍵字,默認(rèn)隱式就是抽象方法,也不能加 final 關(guān)鍵字來防止抽象方法的繼承。而抽象類中抽象方法前則必須加上 abstract 表示顯示聲明為抽象方法。

(7)、接口中的抽象方法默認(rèn)是 public 的,也只能是 public 的,不能用 private , protected 修飾符修飾。而抽象類中的抽象方法則可以用 public , protected 來修飾,但不能用 private 。

3. interface 的應(yīng)用場合

(1)、類與類之間需要特定的接口進(jìn)行協(xié)調(diào),而不在乎其如何實(shí)現(xiàn)。
(2)、作為能夠?qū)崿F(xiàn)特定功能的標(biāo)識存在,也可以是什么接口方法都沒有的純粹標(biāo)識。
(3)、需要將一組類視為單一的類,而調(diào)用者只通過接口來與這組類發(fā)生聯(lián)系。
(4)、需要實(shí)現(xiàn)特定的多項(xiàng)功能,而這些功能之間可能完全沒有任何聯(lián)系。

4. abstract class 的應(yīng)用場合

一句話,在既需要統(tǒng)一的接口,又需要實(shí)例變量或缺省的方法的情況下,就可以使用它。最常見的有:
(1)、定義了一組接口,但又不想強(qiáng)迫每個實(shí)現(xiàn)類都必須實(shí)現(xiàn)所有的接口??梢杂?abstract class 定義一組方法體,甚至可以是空方法體,然后由子類選擇自己所感興趣的方法來覆蓋。
(2)、某些場合下,只靠純粹的接口不能滿足類與類之間的協(xié)調(diào),還必需類中表示狀態(tài)的變量來區(qū)別不同的關(guān)系。 abstract 的中介作用可以很好地滿足這一點(diǎn)。
(3)、規(guī)范了一組相互協(xié)調(diào)的方法,其中一些方法是共同的,與狀態(tài)無關(guān)的,可以共享的,無需子類分別實(shí)現(xiàn);而另一些方法卻需要各個子類根據(jù)自己特定的狀態(tài)來實(shí)現(xiàn)特 定的功能 。

二、 抽象類abstract class

1 .抽象類是指在 class 前加了 abstract 關(guān)鍵字且存在抽象方法(在類方法 function 關(guān)鍵字前加了 abstract 關(guān)鍵字)的類。
2 .抽象類不能被直接實(shí)例化。抽象類中只定義(或部分實(shí)現(xiàn))子類需要的方法。子類可以通過繼承抽象類并通過實(shí)現(xiàn)抽象類中的所有抽象方法,使抽象類具體化。
3 .如果子類需要實(shí)例化,前提是它實(shí)現(xiàn)了抽象類中的所有抽象方法。如果子類沒有全部實(shí)現(xiàn)抽象類中的所有抽象方法,那么該子類也是一個抽象類,必須在 class 前面加上 abstract 關(guān)鍵字,并且不能被實(shí)例化。

abstract class A
{
    /** 抽象類中可以定義變量 */
    protected $value1 = 0;
    private $value2 = 1;
    public $value3 = 2;
    /** 也可以定義非抽象方法 */
    public function my_print()
    {
        echo "hello,world/n";
    }
    /**
     * 大多數(shù)情況下,抽象類至少含有一個抽象方法。抽象方法用abstract關(guān)鍵字聲明,其中不能有具體內(nèi)容。
     * 可以像聲明普通類方法那樣聲明抽象方法,但是要以分號而不是方法體結(jié)束。也就是說抽象方法在抽象類中不能被實(shí)現(xiàn),也就是沒有函數(shù)體“{some codes}”。
     */
    abstract protected function abstract_func1();
    abstract protected function abstract_func2();
}
abstract class B extends A
{
    public function abstract_func1()
    {
       echo "implement the abstract_func1 in class A/n";
    }
    /** 這么寫在zend studio 8中會報(bào)錯*/
    //abstract protected function abstract_func2();
}
class C extends B
{
    public function abstract_func2()
    {
       echo "implement the abstract_func2 in class A/n";
    }
}
三、 接口interface

1 .抽象類提供了具體實(shí)現(xiàn)的標(biāo)準(zhǔn),而接口則是純粹的模版。接口只定義功能,而不包含實(shí)現(xiàn)的內(nèi)容。接口用關(guān)鍵字 interface 來聲明。
2 . interface 是完全抽象的,只能聲明方法,而且只能聲明 public 的方法,不能聲明 private 及 protected 的方法,不能定義方法體,也不能聲明實(shí)例變量 。然而, interface 卻可以聲明常量變量 。但將常量變量放在 interface 中違背了其作為接口的作用而存在的宗旨,也混淆了 interface 與類的不同價值。如果的確需要,可以將其放在相應(yīng)的 abstract class 或 Class 中。

interface iA  
{  
    const AVAR=3;  
    public function iAfunc1();  
    public function iAfunc2();  
}  
echo iA:: AVAR;  

詳情請看原文:PHP中的 抽象類(abstract class)和 接口(interface)


注:本文為轉(zhuǎn)載,原文地址:PHP中的 抽象類(abstract class)和 接口(interface)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/22600.html

相關(guān)文章

  • PHP面向?qū)ο?/b>

    摘要:面向?qū)ο竺嫦驅(qū)ο蠡A(chǔ)面向?qū)ο笫裁词穷惥哂邢嗤瑢傩蕴卣骱头椒ㄐ袨榈囊幌盗袀€體的集合,類是一個抽象的概念。析構(gòu)函數(shù),當(dāng)一個對象被銷毀前,自動調(diào)用。作用是為新克隆的對象進(jìn)行初始化賦值對象序列化時,自動調(diào)用。使用抽象類的作用限制實(shí)例化。 面向?qū)ο?面向?qū)ο蠡A(chǔ) 面向?qū)ο?什么是類? 具有相同屬性(特征)和方法(行為)的一系列個體的集合,類是一個抽象的概念。 什么是對象? 從類中,拿到的具有具體...

    seanlook 評論0 收藏0
  • PHP設(shè)計(jì)模式(三)抽象工廠模式(Abstract Factory)

    摘要:支持增加任意產(chǎn)品抽象工廠用來生產(chǎn)不同產(chǎn)品族的全部產(chǎn)品。對于增加新的產(chǎn)品,無能為力支持增加產(chǎn)品族參考系列源地址系列目錄設(shè)計(jì)模式概述設(shè)計(jì)模式一簡單工廠模式設(shè)計(jì)模式二工廠方法模式設(shè)計(jì)模式三抽象工廠模式設(shè)計(jì)模式四單例模式 一、什么是抽象工廠模式 抽象工廠模式的用意為:給客戶端提供一個接口,可以創(chuàng)建多個產(chǎn)品族中的產(chǎn)品對象 ,而且使用抽象工廠模式還要滿足以下條件: 系統(tǒng)中有多個產(chǎn)品族,而系統(tǒng)一次...

    W_BinaryTree 評論0 收藏0
  • PHP高級特性-反射Reflection以及Factory工廠設(shè)計(jì)模式的結(jié)合使用[代碼實(shí)例]

    摘要:反射提供給面向?qū)ο缶幊炭梢宰允〉哪芰?,即反射。在簡單工廠模式中,根據(jù)傳遞的參數(shù)來返回不同的類的實(shí)例簡單工廠模式又稱為靜態(tài)工廠方法模式。也就是簡單工廠模式工廠工廠類。PHP高級特性-反射以及工廠設(shè)計(jì)模式的結(jié)合使用 [結(jié)合 Laravel-Admin 代碼實(shí)例講解]利用反射來實(shí)現(xiàn)工廠模式的生產(chǎn)而無需創(chuàng)建特定的工廠類本文地址http://janrs.com/?p=833轉(zhuǎn)載無需經(jīng)過作者本人授權(quán)轉(zhuǎn)載...

    番茄西紅柿 評論0 收藏2637
  • 關(guān)于抽象接口的初步理解

    摘要:關(guān)于抽象類和接口的初步理解什么是抽象類抽象類是指在前加了關(guān)鍵字且存在抽象方法在類方法關(guān)鍵字前加了關(guān)鍵字的類。抽象類不能被直接實(shí)例化。抽象類中只定義或部分實(shí)現(xiàn)子類需要的方法。抽象類提供了具體實(shí)現(xiàn)的標(biāo)準(zhǔn),而接口則是純粹的模板。 關(guān)于抽象類和接口的初步理解 什么是抽象類 抽象類是指在 class 前加了 abstract 關(guān)鍵字且存在抽象方法(在類方法 function 關(guān)鍵字前加了 ab...

    Julylovin 評論0 收藏0
  • PHP修飾符與訪問修飾符

    摘要:抽象類本身不能被實(shí)例化,只有一個類繼承了它,并覆蓋了它所有的抽象方法,這樣我們可以實(shí)例化它的子類修飾的類為接口,接口與抽象類有點(diǎn)類似,不過他們的區(qū)別是,接口所有的方法都是抽象方法,接口的抽象方法前面沒有修飾,成員屬性必須為常量。 類修飾符 1.abstract修飾的類為抽象類,如果一個類中含有抽象方法那么這個類就是抽象類(當(dāng)然一個類中沒有抽象方法,我們也可以定義這個類為抽象類),那么什...

    pakolagij 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<