解释 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 的任何子类。
广告