最终关键字

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 都是该接口的一部分