【发布时间】:2016-03-03 03:22:27
【问题描述】:
我是 php 新手,我正在阅读文档以了解可见性。我对文档中的这个例子有点困惑。
当调用 $myFoo->test() 时,不应该调用 Foos $this->testPrivate(); 。我的意思是 $this 不应该是 Foos 对象而不是 Bar 对象吗? .据我所知(我在这里可能是错的)Foo 将有自己的test() 方法,该方法继承自Bar,调用$myFoo->test() 将调用'$this->testPrivate',其中$this 应该是 Foos 对象 myFoo。那么怎么调用Bar的testPrivate方法呢?
class Bar
{
public function test() {
$this->testPrivate();
$this->testPublic();
}
public function testPublic() {
echo "Bar::testPublic\n";
}
private function testPrivate() {
echo "Bar::testPrivate\n";
}
}
class Foo extends Bar
{
public function testPublic() {
echo "Foo::testPublic\n";
}
private function testPrivate() {
echo "Foo::testPrivate\n";
}
}
$myFoo = new foo();
$myFoo->test(); // Bar::testPrivate
// Foo::testPublic
?>
【问题讨论】:
-
这个构造代码的歧义应被视为一个警告信号。避免在生产代码中这样做:在继承时不要将两个私有方法命名为相同。如果您分配相同的名称,则这些方法可能会执行相同的操作,因此您会出现代码重复。或者他们看起来像做同样的事情,但实际上并没有——那么他们应该有不同的名字。
标签: php inheritance class-visibility