以下代码
<?php
class A {
private function test($str = null) {
echo $str;
}
}
class B extends A {
public function test() {
echo 'b';
}
}
$b = new B();
$b->test();
给出
警告:B :: test()声明应与第13行/ in / oCG5c中的A :: test($ str = NULL)兼容
证明here。
这是为什么?注意父方法是如何私有的,请注意这对于hhvm来说这不是一个问题,并注意php 7如何将其提升为警告。
更新:为了使事情更清楚一点,下面的代码片段,如预期的那样,gives no warning:
<?php
class A {
private function test($str = null) {
echo $str;
}
}
class B extends A {
private function test() {
echo 'b';
}
}
$b = new B();
如果它有所帮助,这里有一个小小的提示,告诉我们属性的私有方式:
<?php
class A
{
private $a;
}
class B extends A
{
private $a;
}
$b = new B();
var_dump($b);
对象(B)#1(2){[&#34; a&#34;:&#34; B&#34;:private] =&gt; NULL [&#34; a&#34;:&#34; A&#34;:private] =&gt; NULL}
拥有两个具有相同名称的私有属性就可以了。它应该用于方法。