PHP的抽象類別、介面的區別和選擇____PHP

來源:互聯網
上載者:User

區別:

1、對介面的使用是通過關鍵字implements。對抽象類別的使用是通過關鍵字extends。當然介面也可以通過關鍵字extends繼承。

2、介面中不可以聲明成員變數(包括類靜態變數),但是可以聲明類常量。抽象類別中可以聲明各種類型成員變數,實現資料的封裝。(另JAVA介面中的成員變數都要聲明為public static final類型)

<?php abstract class Father {function meth1() {echo "meth1...<br>";}abstract function meth2();public $var1="var1";public static $var2="var2";const Var3="Var3";}class Son extends Father {function meth2() {echo "meth2 of Son...<br>";}}$s=new Son();echo $s->var1."<br>";echo Father::$var2."<br>";echo Father::Var3."<br>";Interface IFather {//public $iVar1="iVar1";        此處介面定義中不能包含成員變數//public static $iVar2="iVar2"; 此處介面定義中不能包含靜態變數const iVar3="iVar3";function iMeth1();}Class ISon implements IFather {function iMeth1() {echo "iMeth1...<br>";}}$is=new ISon();echo IFather::iVar3;?>

3、介面沒有建構函式,抽象類別可以有建構函式。

4、介面中的方法預設都是public類型的,而抽象類別中的方法可以使用private,protected,public來修飾。

5、一個類可以同時實現多個介面,但一個類只能繼承於一個抽象類別。


抽象類別還是介面。 如果要建立一個模型,這個模型將由一些緊密相關的對象採用,就可以使用抽象類別。如果要建立將由一些不相關對象採用的功能,就使用介面。 如果必須從多個來源繼承行為,就使用介面。 如果知道所有類都會共用一個公用的行為實現,就使用抽象類別,並在其中實現該行為。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.