在PHP中有Private
和Final
之间的混淆。关键字'Private'和'Final'有什么区别?
例如,我有3类:
- A类(父类)
- B类(子类)
- C类(其他类)
我明白什么:
- - 答:个公共变量和方法是A类,B类和C类
- 乙访问:私人变量和方法是只对A级访问
- C:保护变量和方法只对A类和B类可访问
- d:最后方法是只对A级访问不是B类
我的问题是:
使用私有后,我们可以像最终实现的功能,那么为什么我们用最后?
我只是问我这个问题,为我自己澄清。
在PHP中有Private
和Final
之间的混淆。关键字'Private'和'Final'有什么区别?
例如,我有3类:
我明白什么:
我的问题是:
使用私有后,我们可以像最终实现的功能,那么为什么我们用最后?
我只是问我这个问题,为我自己澄清。
只是要清楚,关键字final
没有与方法的知名度,做任何事情。方法的可见性由关键字public
,protected
和private
定义。
当另一个类访问方法时,final关键字定义了另一个类是否可以覆盖方法(如果方法是final的,它不能被antoher类覆盖)。否则它甚至不能访问该方法,所以它既不能使用/调用该方法也不能覆盖它。
也只有方法可以是final的,它不能与属性一起使用。
A,B和C是正确的,正如我上面的关键字最终说没有什么关系的知名度,所以d是不正确的。
更多信息请参见相应的手册页:
方法的属性final
用于向编译器说明给定方法不能在其他地方被覆盖。因此,如果我们声明函数为final
,然后我们尝试在其他地方覆盖它,我们将获得warning
或fatal error
。
最终课程或方法可以不可以被覆盖。
从PHP DOC
PHP 5引入的最终关键字,它防止通过前缀与最后的定义重写的方法的子类。如果该类本身被定义为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()
?>
[RTM](http://php.net/manual/en/ language.oop5.final.php)如果可见性不是私有的,则子类的最终方法是可访问的。你不能在子类中覆盖它们。所以区别在于最终的方法仍然可以由其他类访问,具体取决于可见性,但是不能将它们作为正常方法覆盖 – Rizier123
这意味着类a的最终方法不能被类b访问,但类c可以访问它们。 –
这取决于它的可见性。 final关键字不会改变方法的可访问性。它只定义了另一个类是否可以覆盖它(何时可以访问它)。但访问权限是由他们的关键字定义的:'private','public','protected' – Rizier123