發表文章

目前顯示的是 8月, 2019的文章

PHP - Interface

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