在PHP中Private
和Final
之间存在混淆。
例如,我有3个班级:
我的理解:
我的问题是:
使用私有后,我们可以实现最终的功能,然后我们使用final?
我问这个问题只是为了我自己的澄清。
答案 0 :(得分:4)
为了说清楚,关键字final
不必对方法的可见性做任何事情。方法的可见性由关键字定义:public
,protected
和private
。
final关键字定义了另一个类是否可以覆盖该方法(如果一个方法是最终的,它不能被antoher类覆盖),而另一个类可以访问该方法。否则它甚至无法访问该方法,因此它既不能使用/调用该方法也不能覆盖它。
此外,只有方法可以是最终的,不能与属性一起使用。
A,B和C是正确的,如上所述,关键字final与可见性无关,因此D不正确。
有关详细信息,请参阅相应的手册页:
答案 1 :(得分:1)
最终的类或方法可以 NOT 覆盖。
来自php doc
PHP 5引入了final关键字,它通过在final中添加前缀来阻止子类覆盖方法。如果类本身被定义为final,则无法扩展。
php文档示例:
<?php
class BaseClass {
public function test() {
echo "BaseClass::test() called\n";
}
final public function moreTesting() {
echo "BaseClass::moreTesting() called\n";
}
}
class ChildClass extends BaseClass {
public function moreTesting() {
echo "ChildClass::moreTesting() called\n";
}
}
// Results in Fatal error: Cannot override final method BaseClass::moreTesting()
?>
答案 2 :(得分:0)
方法的属性final
用于向编译器明确说明给定的方法不能在其他地方被覆盖。
因此,如果我们将某个函数声明为final
,然后我们尝试在其他地方覆盖它,我们将获得warning
或fatal error
。