PHP抽象類別和介面樣本和區別

來源:互聯網
上載者:User

抽象類別(abstract class)和介面(interface)是物件導向很重要的概念,他們很相似,都是定義要實現的方法,但又有不同的使用情境,PHP的抽象類別和介面有什麼區別,看下面的樣本。

介面(Interface)—— 定義行為
抽象類別(Abstract  Class) —— 實現行為
具體類(class)——執行行為


一.介面

介面定義了某種函數的規範,聲明了所需的函數和常量,但是不能指定怎麼實現。介面像是對具體類中方法的規範。

介面定義了發生某一行為需要的方法、方法名。然後允許具體的類來實現這些方法。。
注意:介面類不能定義類成員。定義的方法必須在實現的類中出現。

interface 介面名
{
function 方法1( );
function 方法2( );
}
//實現介面
class 類名 implements 介面名
{
 方法1( );
方法2( );
}

二.抽象類別

抽象類別是執行個體化的類,只能作為被其他類基層的基類。例如,可以寫一個關於read的抽象類別,然後電子閱讀,紙質閱讀來繼承read抽象類別。
abstract class 類名
{
各種方法
}

抽象類別可以確保一致性,因為任何衍生類別都必須實現從該抽象類別繼承所有抽象方法,如果沒有實現,那將產生錯誤。

應該用抽象類別?還是 介面?
這是一個問題

** 如果要建一個類模型,這個模型將由一些緊密相關的對象採用,使用抽象類別。如果模型將由不太相關的對象採用,用介面。
** 如果一個具體class將從多個來源繼承行為,用介面。php類可以繼承多個介面,但是不能繼承多個抽象類別。
** 如果所有的類都要共用一個公用的行為實現,用抽象類別,並在其中實現該行為。。先用子類繼承一個抽象類別,繼承後的子類能夠實現原先的行為。。

摘: _______

事物的出現,總是有它出現的理由(需求)!
但是,事物的生存,需要有適應性(靈活)!
比如:長頸鹿,脖子長,這是個抽象的概念;
能吃草(是非肉食性動物的特徵,介面)。

所以,當需要描述長頸鹿的時候,我們就可以用介面(非肉食性動物)和抽象(脖子長)的方法來定義它,
然後,具體是什麼種類/或者顏色的長頸鹿,怎麼個吃草法,這就是具體類了

PHP介面類

首先看介面,定一個介面類,interface class:


<?php
 
namespace frontend\models;
 
interface TestInterface
{
    public function cloud();
 
    public function sky();
 
    public static function color($color);
}

在PHP中,介面只能定義方法(或靜態方法),但是不能實現具體的方法。在PhpStorm中如果寫具體的方法會提示錯誤。介面比較嚴格的定義需要實現什麼方法,唯寫要實現的方法就行了,不需要具體實現,或定義成員變數。

使用介面:

<?php
 
namespace frontend\models;
 
class Test implements TestInterface
{
    public function cloud()
    {
        echo 'Cloud....';
    }
 
    public function sky()
    {
 
    }
 
    public static function color($color){
 
    }
}
繼承介面類,必須實現介面定義的每個方法,否則也會報錯。這就是PHP的介面,嚴格定義實現哪些方法,並且必須在子類中都實現。

PHP抽象類別

我們定義一個抽象類別:


abstract class Testabstract
{
    public $abstract = 'abstract';
    abstract function hehe();
 
    public function hehe2()
    {
        echo 'hehe2';
    }
}

這裡有兩個方法,一個是用abstract修飾的,這樣寫表示該方法是子類必須實現的,而抽象類別中只能定義不能具體實現。一個方法是普通的成員方法,而且有具體實現,子類也可以重寫。


class ab extends Testabstract
{
    public function hehe()
    {
        echo 'hehe';
    }
}

子類繼承抽象類別,只需實現抽象類別中定義的抽象方法。抽象類別可以定義成員變數,而介面不行。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.