Interface
Interface
- 又稱
介面
接口
契約
- 介面本身是
抽象
的。指一系列的Public
屬性
或函式
。所以你的物件,即便沒有實作任何介面他本身也是一個介面。它提供的介面就是自己所有Public
的屬性
跟函式
。 - 介面可以確保
依賴物件
提供你想要的功能。 - 每個物件都是
實作介面
。 - 創造物件
實作基礎介面
,你的物件就可以執行語言的基礎函式
ex: foreach。
舉例: PHP 中的 array 也是實作幾個陣列功能會用到的 interface
還記得一個物件可以實作多個介面嗎?
這裡會牽扯到兩個物件的耦合程度。
假設你的函式宣告參數的型別是宣告成某個介面
。那你在函式裡面只會拿到介面的 Public 屬性跟函式。
但是如果你把參數的型別直接宣告成某個物件
,在函式裡面就會拿到物件的所有 Public 屬性跟介面。
如果你的函式只需要其中一個介面提供的功能,那就在把參數的型別指定為介面就好。否則你會依賴整個物件。
結論
你會發現整個語言都是照著介面在開發。所以有人常說 programin to a interface
。
介面只是定義一個抽象的概念,至於要實作成什麼樣子,是需要按照需求來決定。
重點是 interface
或抽象類別
,都是向上層程式碼保證他們能提供指定的功能
。
–
小知識:
- C# 跟 Java 一定會宣告參數的型別。這個叫做
Type hint
,如果丟進去的參數不符合型別,編譯時就報錯。所以被叫做強型別語言。 - PHP 跟 JS 沒有強迫一定要有 Type hint。稱作弱型別語言。