说明PHP中的final类和final方法。

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

但是在进入决赛之前,我们需要确保我们对继承概念有很好的理解。在继承中,我们可以从另一个类继承一个类。另外,我们可以重写继承的类中的函数,以替换最初提供的行为。在某些情况下,我们可能需要避免继承类,或者可能需要防止函数被覆盖。这可以通过final来实现,方法是在class和function之前加上final关键字。在任何人尝试扩展final类或覆盖final函数的情况下,这实际上会使PHP产生错误。

注意:

我们只能将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。其中,计算方法标记为最终方法。这意味着我们不能在其任何子类中覆盖show方法。为了识别错误,ChildClass试图定义最终方法show()。这将产生致命错误,这意味着父类的最终方法无法在其子类中定义。

例:

在上课之前使用“最终”关键字

<?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会引发错误消息“ Class Child可能无法从最终类(BaseClass)继承”。这意味着它不允许创建BaseClass的任何子类。