接口類不用實例化,需要一一實現接口定義的所有方法。關鍵字interface implements
接口interface 是一個規定,給人繼承用的東西,有點像抽象類
在里面定義的方法,卻不去實例化,而需要別的類去implements 它,而且必須一一實現接口定義的所有方法,
實際上接口類說白了,就是一個類的模板,一個類的規定,
舉個例子
interface Shop
{
public function buy($gid);
public function sell($gid);
public function view($gid);
}
我聲明一個shop接口類,定義了三個方法:買(buy),賣(sell),看(view),那么繼承此類的所有子類都必須實現這3個方法少一個都不行,
如果子類沒有實現這些話,就無法運行。
實際上接口類說白了,就是一個類的模板,一個類的規定,
如果你屬於這類,你就必須遵循我的規定,少一個都不行,但是具體你怎么去做,我不管,那是你的事,如:
class BaseShop implements Shop
{
public function buy($gid)
{
echo('你購買了ID為 :'.$gid.'的商品');
}
public function sell($gid)
{
echo('你賣了ID為 :'.$gid.'的商品');
}
public function view($gid)
{
echo('你查看了ID為 :'.$gid.'的商品');
}
}
————————————————————————————————————————————————————————————————————————————————————————————————————————
抽象類&抽象方法 (只能被繼承)(關鍵字 abstract)(繼承關鍵字extends)
具有抽象方法的類為抽象類,
抽象方法即為沒有內容的空方法,要求子類進行完善內容,
抽象類不能實例化,只能繼承,
通過extends來實現,抽象類中也可以定義普通方法
父類方法執行方式不確定,但子類還都有這個方法
例1:如交通工具類:定義抽象方法控制交通工具運行方式,這樣每個交通工具如飛機,汽車都要重寫父類方法。如果在父類工具類定義該方法(比如在地上走)沒有任何意義,因為每個交通工具都要重寫(飛機要重寫方法,船要重寫方法),所以針對你類方法的不確定性,我們需要抽象方法,實現多態。
例2:定義動物類,每個動物都有叫聲方法,但是表面不同,所以要定義為抽象類,讓每種動物類去實現功能。
當父類為抽象類時,子類必須重寫父類的抽象方法
抽象類里不一定非要寫抽象方法,但有抽象方法的類必須定義為抽象類
抽象類必須繼承使用
抽象方法不能有主體即{}
<?php
abstract class AbstractClass
{
// 強制要求子類定義這些方法
abstract protected function getValue();
abstract protected function prefixValue($prefix);
// 普通方法(非抽象方法)
public function printOut() {
print $this->getValue();
}
}
________________________________________________________________________________________
