PHP Final关键字

2023-12-07 53

在PHP中,final 关键字用于声明一个类、方法或属性为不可变(不可继承)。使用 final 关键字可以提高代码的可读性和安全性,因为它限制了类的继承和方法的覆盖。

1、当用 final 修饰一个类时,该类不能被继承,子类无法继承父类的方法和属性;

2、当用 final 修饰一个方法时,该方法不能被子类覆盖(重写)。如果子类尝试覆盖这个方法,PHP会抛出一个致命错误。

3、当用 final 修饰一个属性时,该属性的值只能在构造函数中进行初始化,并且之后不能再被修改。这相当于将属性设置为常量。

一、Final方法示例

<?php
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";
   }
}
// 产生 Fatal error: Cannot override final method BaseClass::moreTesting()
?>

二、Final类示例

<?php
final class BaseClass {
   public function test() {
       echo "BaseClass::test() called\n";
   }
   
   // 由于类已经是 final,所以 final 关键字是多余的
   final public function moreTesting() {
       echo "BaseClass::moreTesting() called\n";
   }
}

class ChildClass extends BaseClass {
}
// 产生 Fatal error: Class ChildClass may not inherit from final class (BaseClass)
?>

三、PHP8.1.0

下面列出了PHP 8.1.0 起可用的 final 常量示例:

<?php
class Foo
{
    final public const X = "foo";
}

class Bar extends Foo
{
    public const X = "bar";
}

// Fatal error: Bar::X cannot override final constant Foo::X
?>

注意:属性和常量不能被定义为 final,只有类、方法、常量(PHP 8.1.0 起)才能被定义为 final。 从 PHP 8.0.0 起,除了构造函数之外,私有方法也不能声明为 final 。

  • 广告合作

  • QQ群号:707632017

温馨提示:
1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。 2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。
PHP Final关键字
上一篇: PHP魔术方法
PHP Final关键字
下一篇: PHP对象复制