區別:1、抽象類別可以有屬性、普通方法、抽象方法,但介面不能有屬性、普通方法、可以有常數;2、抽象類別用abstract關鍵字在類別前聲明,且有class聲明為類,介面是用interface來聲明,但不能用class來聲明,因為介面不是類。
推薦:《PHP視訊教學》
對於物件導向開發,抽象類別與介面這兩個東西是比較難理解的。以下這篇文章跟大家介紹一下php中抽象類別與介面之間的差異。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。
抽象類別:是基於類別來說,其本身就是類,只是一種特殊的類,不能直接實例,可以在類別裡定義方法,屬性。類似模版,規範後讓子類別實作詳細功能。
介面:主要基於方法的規範,有點像抽象類別裡的抽象方法,只是其相對於抽象方法來說,更獨立。可讓某個類別透過組合多個方法來形成新的類別。
php中抽象類別與介面的差異
1、抽象類別可以有屬性、普通方法、抽象方法,但介面不能有屬性、普通方法、可以有常數
2、抽象類別內未必有抽象方法,但介面內一定會有「抽象」方法
3、語法上有不同
4、抽象類用abstract關鍵字在類別前聲明,且有class聲明為類,介面是用interface來聲明,但不能用class來聲明,因為介面不是類別。
5、抽象類別的抽象方法一定要用abstract來聲明,而介面則不需要
6、抽象類別是用extends關鍵字讓子類別繼承父類別後,在子類別實作詳細的抽象方法。而介面則是用implements讓普通類別在類別裡實作介面的詳細方法,且介面可以一次實作多個方法,用逗號分開各個介面就可
抽象類別:
抽象類別無法被實例化,它的作用是為所有繼承自它的類別定義(或部分實作)介面。
使用 abstract 關鍵字定義抽象類別。
可以像在普通類別中那樣在抽象類別中建立方法和屬性,在大多數情況下,一個抽象類別至少包含一個抽象方法,抽象方法也是透過abstract 關鍵字聲明的。抽象方法只有方法聲明,沒有方法實作。不能編寫方法體。
abstract class ShopProductWriter { protected $product = []; /** * 抽象类中可以定义普通方法 */ public function addProduct($shopProduct) { $this->product = $shopProduct; } /** * 定义一个抽象方法,只有方法声明,没有方法实现 */ abstract public function write(); }
任何繼承自抽象類別的類別都必須實作所有的抽象方法,否則它本身就必須被定義為抽象類別。子類別不能僅僅實作抽象方法,還必須遵守方法簽名。這意味著實現方法的存取控制不能比抽象方法更嚴格。實作方法還需要有與抽象方法相同數量的參數,以及相同的型別提示。
class XmlProductWriter extends ShopProductWriter { /** * 任何继承自抽象类的类都必须实现所有的抽象方法 */ public function write() { echo 'XmlProductWriter'; } }
介面:
#抽象類別允許我們提供一些實現,但介面則是純粹的模板。介面只定義功能,不能有實作。可以有屬性和方法的聲明,但不能有方法體。
使用 interface 關鍵字宣告介面。
interface Price { /** * 只有方法声明,没有方法实现 */ public function getPrice(); }
任何實作該介面的類別都必須實作這個介面定義的所有方法,否則這個類別就只能宣告為抽象類別。
可以在類別的聲明中使用 implements 關鍵字讓它實作介面。
class ShopProduct implements Price { protected $price; public function getPrice() { // TODO: Implement getPrice() method. return $this->price; } }
一個實作類別與它所實作的介面具有相同的型別。
一個類別可以在繼承一個父類別的同時實作多個接口,implements 關鍵字後面跟著多個接口的名字,它們之間由逗號分隔開來。
相關推薦:php培訓
以上是php中抽象類別與介面的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!