iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0
自我挑戰組

我推的Laravel系列 第 17

【Day-16】我推的Laravel-進階篇-Interface & Contract Pattern

  • 分享至 

  • xImage
  •  

簡介

前面有提到類(Class)、物件(Object)、介面(Inerface)的關係,今天稍微深入Interface以及Contract

Interface常會和Contract比較,以下是各自的定義

  • Interface : Interface 是一種定義方法簽名的純抽象類型。接口定義了一組方法,但沒有提供方法的實現。希望你有看過之前的這篇提供的燃油車、汽油車和油電混合以及前一篇的PostRepositoryInterface有帶你初步了解如何使用Interface
  • Contract : 在 Laravel 中,Contract 是一個更寬泛的術語,它可以表示任何類型的契約或協議。Contract 可以包括接口,也可以包括抽象類別、類別方法等。

兩者看起來很類似,但其實有不同的定義和使用方式
這裡提到,Contract是Interface,但Interface不一定是Contract
這篇中找到一張圖如下:
https://ithelp.ithome.com.tw/upload/images/20230929/20163286aIFD0Vj2zk.png

而Laravel的Contracts是一系列的Interface,定義了框架核心服務的介面
記住Contracts並不是php或者Laravel特有,當然Interface也不是

正題

因為這次沒有實作,以觀摩這部影片的方式來學習Interface

裡面有Interface、Contract的範例,筆者各拿其中最多顆星的來(星星越多可能不能說明甚麼根本篇主題的相關性,但至少代表很多人覺得)

monica

https://ithelp.ithome.com.tw/upload/images/20231001/20163286WNBVkH5rQq.png

此範例定義了Hashing這個Interface
並用Class(ModelBindingHasher)implements這個Interface,
再以Trait來實現Interface的功能

panel

RepositoryInterface 定義了自身所代表的功能
TaskRepositoryInterface extends(可以理解為引用、或者擴充)RepositoryInterface,並定義自己另外的功能
TaskRepository 最後implements了TaskRepositoryInterface

總結

Contract其實就是Interface,觀察下來,Laravel除了自身核心的一些Contract之外,沒有特別定義Contract(當然也可以自己寫
Interface所使用的範圍可以更加廣泛
可以以這篇文章作為基礎,透過觀摩別的人寫作方式來進一步理解個別的定義


上一篇
【Day-15】我推的Laravel-進階篇-Queue
下一篇
【Day-17】我推的Laravel-進階篇-Model Relation & N+1 Query問題
系列文
我推的Laravel31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言