抽象類
- 抽象類無法被實體化,它的作用是為所有繼承自它的類定義(或部分實作)介面,
- 使用 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 關鍵字后面跟著多個介面的名字,它們之間由逗號分隔開來,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/93433.html
標籤:PHP
上一篇:為什么CAS加鎖是執行緒安全的?——原子操作底層原理
下一篇:微信Pcweb登錄簡介
