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的任何子类。