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