PHP “final” 关键字用于类的定义、类的方法以及类常量属性的定义。
具有 “final” 关键字的类
让我们看看如何使用 “final” 关键字创建一个类 −
类定义中的 “final” 关键字可防止扩展此类。换句话说,您不能将 final 类用作父类。如果尝试,PHP 解析器会引发错误
当您运行此代码时,它将显示一个错误 -
PHP Fatal error: Class newclass may not inherit from final class (myclass)
具有 “final” 关键字的方法
以下是使用 “final” 关键字创建方法的方法 -
在方法定义前面加上 final 关键字可以防止它在子类中被覆盖。具有 final 方法的类可以扩展,但子类不能覆盖它。
示例
请看下面的例子 -
当您运行此代码时,它将显示一个错误 -
PHP Fatal error: Cannot override final method myclass::hello() in hello.php
带有 “final” 关键字的常量
从 PHP 8.1.0 开始,你也可以在类中使用 final 关键字声明一个常量。
如果尝试在子类中覆盖父类中的最终常量,则会遇到错误。
当您运行此代码时,它将显示一个错误 -
Fatal error: newclass::NAME cannot override final constant myclass::NAME
示例
以下 PHP 脚本包含一个父类 ellipse,其中 PI 常量和 area() 方法都声明为 final。它们由 circle 类继承。area() 函数计算圆的面积。
它将产生以下输出 -
面积: 78.571428571429
注意:类的实例变量或属性不能声明为 final。