最终关键字

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