Interface

Interface

  • 又稱 介面 接口 契約
  • 介面本身是抽象的。指一系列的 Public 屬性函式。所以你的物件,即便沒有實作任何介面他本身也是一個介面。它提供的介面就是自己所有 Public屬性函式
  • 介面可以確保依賴物件提供你想要的功能。
  • 每個物件都是實作介面
  • 創造物件實作基礎介面,你的物件就可以執行語言的基礎函式 ex: foreach。

舉例: PHP 中的 array 也是實作幾個陣列功能會用到的 interface

還記得一個物件可以實作多個介面嗎?

這裡會牽扯到兩個物件的耦合程度。
假設你的函式宣告參數的型別是宣告成某個介面。那你在函式裡面只會拿到介面的 Public 屬性跟函式。
但是如果你把參數的型別直接宣告成某個物件,在函式裡面就會拿到物件的所有 Public 屬性跟介面。

如果你的函式只需要其中一個介面提供的功能,那就在把參數的型別指定為介面就好。否則你會依賴整個物件。

結論

你會發現整個語言都是照著介面在開發。所以有人常說 programin to a interface
介面只是定義一個抽象的概念,至於要實作成什麼樣子,是需要按照需求來決定。

重點是 interface抽象類別,都是向上層程式碼保證他們能提供指定的功能

小知識:

  • C# 跟 Java 一定會宣告參數的型別。這個叫做 Type hint,如果丟進去的參數不符合型別,編譯時就報錯。所以被叫做強型別語言。
  • PHP 跟 JS 沒有強迫一定要有 Type hint。稱作弱型別語言。
Author

Hank

Posted on

2019-11-26

Updated on

2020-12-01

Licensed under