前面有提到類(Class)、物件(Object)、介面(Inerface)的關係,今天稍微深入Interface以及Contract
Interface常會和Contract比較,以下是各自的定義
兩者看起來很類似,但其實有不同的定義和使用方式
這裡提到,Contract是Interface,但Interface不一定是Contract
在這篇中找到一張圖如下:
而Laravel的Contracts是一系列的Interface,定義了框架核心服務的介面
記住Contracts並不是php或者Laravel特有,當然Interface也不是
因為這次沒有實作,以觀摩這部影片的方式來學習Interface
裡面有Interface、Contract的範例,筆者各拿其中最多顆星的來(星星越多可能不能說明甚麼根本篇主題的相關性,但至少代表很多人覺得)
此範例定義了Hashing這個Interface
並用Class(ModelBindingHasher)implements這個Interface,
再以Trait來實現Interface的功能
RepositoryInterface 定義了自身所代表的功能
TaskRepositoryInterface extends(可以理解為引用、或者擴充)RepositoryInterface,並定義自己另外的功能
TaskRepository 最後implements了TaskRepositoryInterface
Contract其實就是Interface,觀察下來,Laravel除了自身核心的一些Contract之外,沒有特別定義Contract(當然也可以自己寫
Interface所使用的範圍可以更加廣泛
可以以這篇文章作為基礎,透過觀摩別的人寫作方式來進一步理解個別的定義