# Laravel OOP ## 可視性(Visibility) * public * 可以在類別的裡面與外面被存取。 * protected * 受保護,無法被外部存取,但子類別可調用父類別的protected方法 * private * 私有的,子類別也無法存取父類別的方法 * static * 可用解析運算子 (scope resolution operator) `::` 來調用這些 static 屬性或方法 ## SOLID 原則 - Single Responsibility 1. Single Responsibility Principle (單一職責原則) 1. Open Closed Principle (開放封閉原則) 1. Liskov Substitution Principle (里氏替換原則) 1. Interface Segregation Principle (介面隔離原則) 1. Dependency Inversion Principle (依賴反轉原則) ### 單一職責原則 > 一個 class 應該只做一件事 ### 開放封閉原則 > 把所有需擴展的功能行為透過 interface 來定義,並且反轉兩邊的相依關係。 ### 里氏替換原則 > 對於父類別或者 interface 出現的地方,都可以透過子類別或者該 interface 的實作來取代,而不能破壞原有的行為 1. 子類別必須完全實現父類別的方法 1. 每個方法使用前,必須檢驗傳入參數的正確性,例如 int 及 double 1. 執行的結果必須符合 contracts,例如回傳的參數型態 1. 拋出的例外狀況必須相同 ### 介面隔離原則 > 對於所有待實作的類別,不該強迫實作它不需要的方法 ### 依賴反轉原則 > 所有物件的相依關係需要依賴於抽象類別,例如 contract、interface、abstraction,而非 concretion class