最終關鍵字

Def: Final Keyword 通過在 final 中新增字首來阻止子類覆蓋方法。如果類本身被定義為 final,則無法擴充套件

最終方法

class BaseClass {
   public function test() {
       echo "BaseClass::test() called\n";
   }
   
   final public function moreTesting() {
       echo "BaseClass::moreTesting() called\n";
   }
}

class ChildClass extends BaseClass {
   public function moreTesting() {
       echo "ChildClass::moreTesting() called\n";
   }
}
// Results in Fatal error: Cannot override final method BaseClass::moreTesting()

最終類:

final class BaseClass {
   public function test() {
       echo "BaseClass::test() called\n";
   }

   // Here it doesn't matter if you specify the function as final or not
   final public function moreTesting() {
       echo "BaseClass::moreTesting() called\n";
   }
}

class ChildClass extends BaseClass {
}
// Results in Fatal error: Class ChildClass may not inherit from final class (BaseClass)

最終常量: 與 Java 不同,final 關鍵字不用於 PHP 中的類常量。請改用關鍵字 const

為什麼我要使用 final

  1. 防止厄運的大規模繼承鏈
  2. 鼓勵作文
  3. 強制開發人員考慮使用者公共 API
  4. 強制開發人員縮小物件的公共 API
  5. final 類總是可以擴充套件
  6. extends 打破了封裝
  7. 你不需要那種靈活性
  8. 你可以自由更改程式碼

什麼時候避免 final 最終的類只能在以下假設下有效運作:

  1. 最後一個類實現了一個抽象(介面)
  2. 最終類的所有公共 API 都是該介面的一部分