PHP之抽象類和介面

2021-07-25 21:35:22 字數 2745 閱讀 4520

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

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

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

先看乙個普通類:

<?php

class

privated $catch;

piblic function

tree

($sweet)

echo

$eat;

?>

再看乙個抽象類:

<?php

abstract

class

privated $catch;

abstract

public

function

tree1

($sweet);

public

function

tree2

() public

function

_construct()}

?>

<?php

class

anothertree

extends

public

function

tree1

($sweet)

}echo

?>

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

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

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

具體例子如下:

<?php

inte***ce

fruit

?>

<?php

include_once('fruit.php');

class

fruittree

implements

fruit

public

function

orange

() }

$tree=new fruittree();

echo

echo

$tree->orange();

?>

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

<?php

inte***ce

testinte***ce

class

testclass

implements

testinte***ce

public

function

alert

($str)

public

function

__destruct

()

} $test1 = new testclass();

?>

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

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

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

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

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

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

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

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

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

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

php抽象類和介面

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

php 介面和抽象類

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

PHP學習之抽象類和介面

抽象類 可以是空類,不能建立物件,不能例項化,只能被繼承 abstract class absfirst 第乙個常量是 self abscl.介面1 可以是空的介面 不能定義變數 不能定義其他成員方法 inte ce intfirst 介面2 inte ce intsecond 實現類 定義的抽象方...