PHP抽象類和介面用法例項詳解

2021-08-16 11:16:53 字數 4304 閱讀 1512

前言

對於oop,估計大多數人並不陌生。有些人除php外也學習不少其他語言,會發現php的不同之處,可能語法極其醜陋,但並不妨礙它成為世界上最好的語言(邪教語言)。php可以允許常量作為介面的一部分,而對於抽象的理解十分重要。

計算機上,對抽象的理解與自然語言中我們每天使用的抽象概念有所不同。比如,我們指代『狗'、『貓'等動物,我們會說『那只狗/貓',他們就是具有狗/貓這類特徵的具體例項。但是我們不能把貓和狗看作一類,也就是說你不能說狗是貓,我們可以把狗和貓都定義到動物這一類。所以我們把抽象定義為乙個物件的基本特徵,使他與其他物件明確區分開。

抽象類

抽象類裡面可以有非抽象方法。但介面裡只能有抽象方法。 宣告方法的存在而不去實現它的類被叫做抽像類(abstract class),它用於要建立乙個體現某些基本行為的類,並為該類宣告方法,但不能在該類中實現該類的情況。不能建立abstract 類的例項。然而可以建立乙個變數,其型別是乙個抽像類,並讓它指向具體子類的乙個例項。不能有抽像建構函式或抽像靜態方法。abstract 類的子類為它們父類中的所有抽像方法提供實現,否則它們也是抽像類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。

先看乙個普通類:

<?php

class

privated$catch;

piblicfunctiontree($sweet)=new

$eat=->tree();

echo$eat;

?>

再看乙個抽象類:

<?php

abstractclass

privated$catch;

abstractpublicfunctiontree1($sweet);

publicfunctiontree2()

publicfunction_construct()

}

?>

<?php

include_once();

classanothertreeextends

publicfunctiontree1($sweet)

}=new

echo->tree1('sweet');

?>

從普通類和抽象類可以看出:

抽象類和抽象方法前面定義必須有abstract,呼叫為extends。抽象類中可以有具體方法,並且具體方法可以在抽象類中例項化,然而抽象方法不可以在抽象類中例項化。

介面

oop模式中介面也是比不可少的一部分,介面(inte***ce)是抽像類的變體。在介面中,所有方法都是抽像的。多繼承性可通過實現這樣的介面而獲得。介面中的所有方法都是抽像的,沒有乙個有程式體。介面只可以定義static final成員變數。介面的實現與子類相似,除了該實現類不能從介面定義中繼承行為。當類實現特殊介面時,它定義(即將程式體給予)所有這種介面的方法。然後,它可以在實現了該介面的類的任何對像上呼叫介面的方法。由於有抽像類,它允許使用介面名作為引用變數的型別。通常的動態聯編將生效。引用可以轉換到介面型別或從介面型別轉換,instanceof 運算子可以用來決定某物件的類是否實現了介面。

具體例子如下:

<?php

inte***cefruit

?>

<?php

include_once('fruit.php');

classfruittreeimplementsfruit

publicfunctionorange()

}

$tree=newfruittree();

echo$tree'sweet');

echo$tree->orange();

?>

介面和常量

乙個網上看到的例子:(介面名和常量之間要用間隔符『::'隔開,介面中可以用靜態常量,變數不可以)

<?php

inte***cetestinte***ce

classtestclassimplementstestinte***ce

publicfunctionalert($str)

publicfunction__destruct()

}

$test1=newtestclass();

?>

我們可以看出介面和抽象類的區別:

1、介面中沒有具體方法,都是抽象方法。

2、介面呼叫是implements,抽象類是extends。

3、介面中不可以宣告成員變數(包括類靜態變數),但是可以宣告類常量。抽象類中可以宣告各種型別成員變數,實現資料的封裝。

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

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

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

使用選擇

如果要建立乙個模型,這個模型將由一些緊密相關的物件採用,就可以使用抽象類。如果要建立將由一些不相關物件採用的功能,就使用介面。

如果必須從多個**繼承行為,就使用介面。

如果知道所有類都會共享乙個公共的行為實現,就使用抽象類,並在其中實現該行為。

抽象介面 php,簡述php抽象類和介面例項

抽象類 1 抽象類中可以宣告各種型別的變數。2 類中只要有抽象方法這個類就必須申明為抽象類。抽象方法的定義 abstract 修飾符 function 方法名 param 3 抽象類中的抽象方法,在子類中必須實現,並且保持引數一致,但是可以使用額外的預設值。4 抽象類不可以直接例項化。abstrac...

php抽象類和介面

介面 使用介面,你可以指定某個類必須實現那些方法,但是不需要定義這些方法的具體內容,我們可以通過inte ce來定義乙個介面,就像定義標準類一樣,但其中定義所有的方法都是空的,介面中定義的所有的方法都必須是public 實現乙個介面,可以使用implement操作符,類中必須實現介面中定義的所用的方...

php 介面和抽象類

php 介面和抽象類 介面 inte ce 在介面內定義方法,可不提供具體的 實現 作用 提供乙個規範,如果我們知道乙個類實現了某個介面,那麼就知道了可以呼叫該介面的那些方法,我們只需要知道這些就夠了。當有很多人一起開發乙個專案時,可能都會去呼叫別人寫的一些類,我怎麼知道他的某個功能的實現方法是怎麼...