最终关键字
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
?
- 防止厄运的大规模继承链
- 鼓励作文
- 强制开发人员考虑用户公共 API
- 强制开发人员缩小对象的公共 API
final
类总是可以扩展extends
打破了封装- 你不需要那种灵活性
- 你可以自由更改代码
什么时候避免 final
: 最终的类只能在以下假设下有效运作:
- 最后一个类实现了一个抽象(接口)
- 最终类的所有公共 API 都是该接口的一部分