前言
對於oop,估計大多數人並不陌生。有些人除php外也學習不少其他語言,會發現php的不同之處,可能語法極其醜陋,但並不妨礙它成為世界上最好的語言(邪教語言)。php可以允許常量作為介面的一部分,而對於抽象的理解十分重要。
計算機上,對抽象的理解與自然語言中我們每天使用的抽象概念有所不同。比如,我們指代『狗'、『貓'等動物,我們會說『那只狗/貓',他們就是具有狗/貓這類特徵的具體例項。但是我們不能把貓和狗看作一類,也就是說你不能說狗是貓,我們可以把狗和貓都定義到動物這一類。所以我們把抽象定義為乙個物件的基本特徵,使他與其他物件明確區分開。
抽象類
抽象類裡面可以有非抽象方法。但介面裡只能有抽象方法。 宣告方法的存在而不去實現它的類被叫做抽像類(abstract class),它用於要建立乙個體現某些基本行為的類,並為該類宣告方法,但不能在該類中實現該類的情況。不能建立abstract 類的例項。然而可以建立乙個變數,其型別是乙個抽像類,並讓它指向具體子類的乙個例項。不能有抽像建構函式或抽像靜態方法。abstract 類的子類為它們父類中的所有抽像方法提供實現,否則它們也是抽像類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。
先看乙個普通類:
<?php
class
privated
$catch
;
piblic
function
tree(
$sweet
)
=
new
$eat
=
->tree(
);
echo
$eat
;
?>
再看乙個抽象類:
<?php
abstract
class
privated
$catch
;
abstract
public
function
tree1(
$sweet
);
public
function
tree2()
public
function
_construct()
}
?>
<?php
include_once
(
);
class
anothertree
extends
public
function
tree1(
$sweet
)
}
=
new
echo
->tree1(
'sweet'
);
?>
從普通類和抽象類可以看出:
抽象類和抽象方法前面定義必須有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
$tree
'sweet'
);
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,簡述php抽象類和介面例項
抽象類 1 抽象類中可以宣告各種型別的變數。2 類中只要有抽象方法這個類就必須申明為抽象類。抽象方法的定義 abstract 修飾符 function 方法名 param 3 抽象類中的抽象方法,在子類中必須實現,並且保持引數一致,但是可以使用額外的預設值。4 抽象類不可以直接例項化。abstrac...
php抽象類和介面
介面 使用介面,你可以指定某個類必須實現那些方法,但是不需要定義這些方法的具體內容,我們可以通過inte ce來定義乙個介面,就像定義標準類一樣,但其中定義所有的方法都是空的,介面中定義的所有的方法都必須是public 實現乙個介面,可以使用implement操作符,類中必須實現介面中定義的所用的方...
php 介面和抽象類
php 介面和抽象類 介面 inte ce 在介面內定義方法,可不提供具體的 實現 作用 提供乙個規範,如果我們知道乙個類實現了某個介面,那麼就知道了可以呼叫該介面的那些方法,我們只需要知道這些就夠了。當有很多人一起開發乙個專案時,可能都會去呼叫別人寫的一些類,我怎麼知道他的某個功能的實現方法是怎麼...