PHP final关键字的2种用法(附带实例)
从 PHP 5 开始,新增了一个 final 关键字:
【实例】final方法不能被重写。

图 1 程序运行结果
【实例】final类不能被继承。

图 2 报错信息
- 如果父类中的方法被声明为 final,则子类无法覆盖该方法;
- 如果一个类被声明为 final,则不能被继承。
final方法不能被重写
如果希望类中的某个方法不能被子类重写,就可以设置该方法为 final 方法,只需要在方法前加上 final 修饰符即可。如果这个方法被子类重写,将会出现错误。【实例】final方法不能被重写。
<?php class Math{ // 定义类 Math // 计算两个数值的和 public final function Sum($a,$b) { return $a+$b; } } class M extends Math { // M 继承 Math 类 public function Sum($a,$b) { // 重写 Sum 方法 echo '这里先测试一下'; } } $math = new M(); echo $math->Sum(10,20); ?>运行结果如下图所示。不难看出,final方法不能被重写,否则会报错。

图 1 程序运行结果
final类不能被继承
final 关键词可以终止类的继承。final 类不能有子类,final 方法不能被覆盖。【实例】final类不能被继承。
<?php final class Poth{ public $aa = 9.99; } $poth = new Poth(); echo $poth; //声明M类,它继承自Poth类,但执行时会出错,final类不能被继承 class M extends Poth { } ?>运行结果如下图所示:

图 2 报错信息