對於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 實現類 定義的抽象方...