PHP final关键字怎么用?
在 PHP 中final关键字可以防止 class 和 function 被修改或覆盖。它有助于保护代码的重要部分确保在进行修改时不会意外破坏它们。final关键字用于 class 的定义、class 中的 method以及 class 的 constant property 的定义。final 关键字的作用是什么final关键字有两种用法 —用于 Class防止该 class 被扩展继承。用于 Method防止它们在子类中被覆盖。在本章中我们将介绍以下主题 —与 Class 一起使用 final与 Method 一起使用 final与 Constant 一起使用 final实际示例ellipse 和 circle Class与 Class 一起使用 final让我们看看如何使用final关键字创建 class —final class myclass { /*类成员*/ }示例Class 继承错误class 定义中的final关键字防止该 class 被扩展。换句话说你不能将 final class 用作父类。如果尝试这样做PHP 解析器会抛出错误。?php final class myclass { /* 类体 */ } class newclass extends myclass { /* 类体 */ } ?输出运行此代码时将显示错误—PHP Fatal error: Class newclass may not inherit from final class (myclass)与 Method 一起使用 final以下是如何使用final关键字创建 method —class myclass { final function myfunction() { /* 函数体 */ } }在 method 定义前添加final关键字可以防止它在子类中被覆盖。包含finalmethod 的 class 可以被扩展但子类不能覆盖它。示例Method 覆盖错误看下面的示例 —?php class myclass { final public function hello() { echo Hello World!; } } class newclass extends myclass { public function hello() { echo Hello PHP!; } } ?输出运行此代码时将显示错误—PHP Fatal error: Cannot override final method myclass::hello() in hello.php与 Constant 一起使用 final从 PHP 8.1.0 开始你也可以使用final关键字在 class 中声明 constant。final public const NAME My Class;示例Final constant 继承错误如果你尝试在子类中覆盖父类中的 final constant将遇到错误。?php class myclass { final public const NAME My Class; final public function hello() { echo Hello World!; } } class newclass extends myclass { public const NAME New Class; } ?输出运行此代码时将显示错误—Fatal error: newclass::NAME cannot override final constant myclass::NAME实际示例ellipse 和 circle Class以下 PHP 脚本包含一个父类 ellipse其中 PI constant 和 area() method 都被声明为 final。它们被 circle class 继承。area() function 计算圆的面积。?php class ellipse { final public const PI22/7; private float $a, $b; public function __construct($x, $y) { $this-a $x; $this-b $y; } final public function area() : float { return self::PI*$this-a*$this-b; } } class circle extends ellipse { public function __construct(float $x) { parent::__construct($x, $x); } } $c1 new circle(5); echo Area: . $c1-area() . PHP_EOL; ?输出它将产生以下输出—Area: 78.571428571429注意class 的实例变量或属性不能被声明为 final。