最終關鍵字

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 都是該介面的一部分