Ita*_*vka 6 php oop inheritance
我正在使用php 5.3,是的,有一个错误,但有些人认为这不是一个错误,这让我很奇怪.
abstract class A{
private function bobo(array $in){
//do something
}
}
class B extends A{
private function bobo($shmoo,$shmaa){
//do something
}
}
Run Code Online (Sandbox Code Playgroud)
这会引发错误.不应该继承忽略私有方法吗?!
'B :: bobo()的声明应该与A :: bobo()的声明兼容
请注意,错误报告略有偏差,因为PHP会在您出现错误级别时记录此消息E_STRICT(或者,最近,无论您的错误级别如何,只要您设置了自定义错误处理程序).
PHP的可见性规则清楚地表明,孩子无法看到其父母的私人成员,我怀疑这对任何人来说都是令人惊讶的.如果孩子看不到其父母的方法,我不明白它如何有责任服从他们的定义.
我个人认为这个bug被标记为虚假而没有任何解释为什么它不是一个真正的缺陷(因为它不明显,我在文档中找不到任何提及它)有点不对,但是是的.除此之外,我认为第2669行的意思zend_compile.c应该如下:
} else if (child->prototype &&
(EG(error_reporting) & E_STRICT || EG(user_error_handler))) {
Run Code Online (Sandbox Code Playgroud)
...当父方法被标记为私有时,这将避免错误弹出.鉴于你总是可以选择不登录E_STRICT,并且它不会对任何事情产生负面影响,我认为这并不是什么大不了的事.我绝对不知道它是如何故意的,但我也不是PHP引擎开发人员.