解释 PHP 中的 final 类和 final 方法。


final 关键字是由 PHP5 引入的,与面向对象编程的概念相关。

但在我们深入了解 final 之前,我们需要确保我们对继承的概念有很好的理解。在继承中,我们可以从另一个类继承一个类。此外,我们可以在继承类中重写一个函数,以替换最初提供的行为。在某些情况下,我们可能需要阻止从一个类继承,或者我们可能需要阻止重写一个函数。这可以通过 final 来实现,方法是在类和函数前加上 final 关键字,这实际上会导致 PHP 在任何人试图扩展 final 类或重写 final 函数时产生错误。

注意

我们只能对方法和类使用 final 关键字。

让我们通过以下示例演示这个概念。

示例

我们不能重写父类函数。

<?php
   class BaseClass{
      final function calculate($val1,$val2){
         $sum = $val1+$val2;
         echo "Sum of given no=".$sum;
         }
      }
   class ChildClass extends BaseClass{
      function calculate($x,$y){
         $mult=$val1*$val2;
         echo "Multiplication of given no=".$mult;
         }
      }
   $obj= new ChildClass();
   $obj->show(10,10);
?>

输出

PHP Fatal error: Cannot override final method BaseClass::calculate()

解释

在上面的示例中,BaseClass 类是父类。其中 calculate 方法被标记为 final。这意味着我们不能在其任何子类中重写 show 方法。为了识别错误,ChildClass 试图定义 final 方法 show()。这将产生一个致命错误,这意味着父类的 final 方法不能在其子类中定义。

示例

在类名前使用 "Final" 关键字

<?php
   final Class BaseClass{
      function printData($val1,$val2){
         $add=$val1+$val2;
         echo "Sum of given no=".$s;
         }
      }
   class Child extends BaseClass{
      function printData($val1,$val2){
         $m=$val1*$val2;
         echo "Multiplication of given no=".$m;
         }
      }
   $obj= new Child();
   $obj->printData(20,20);
?>

输出

PHP Fatal error: Class Child may not inherit from final class (BaseClass)

解释

在上面的示例中,BaseClass 类用 final 定义,因此我们不能扩展此类。当 Child 类试图从 BaseClass 继承时(这意味着 Child 是 BaseClass 的子类),PHP 会抛出一个错误消息“类 Child 不能继承自 final 类 (BaseClass)”。这意味着它不允许创建 BaseClass 的任何子类。

更新于:2019年7月30日

1K+ 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告