检查下面给出的代码。我无法理解它如何调用Class Bar类的testPrivate()方法。根据我的假设,它应该从Foo类调用方法,即Foo :: testPrivate。
<?php
class Bar
{
public function test() {
$this->testPrivate();
$this->testPublic();
}
public function testPublic() {
echo "Bar::testPublic\n";
}
private function testPrivate() {
echo "<br>Bar::testPrivate\n";
}
}
class Foo extends Bar
{
public function testPublic() {
echo "<br>Foo::testPublic\n";
}
private function testPrivate() {
echo "<br>Foo::testPrivate\n";
}
}
$myFoo = new foo();
$myFoo->test(); // Bar::testPrivate
// Foo::testPublic
?>
答案 0 :(得分:1)
我认为您误解了私有方法是什么。 Foo :: testPrivate()只能从Foo内部调用。您可以使用 protected 方法实现您描述的行为。受保护意味着类和任何扩展它的类都可见。
答案 1 :(得分:1)
如果您希望子类能够重载父类中定义的方法,则该方法必须声明为 protected
- 而不是 { {1}} 强>
在这里,如果您将private
方法定义更改为:
testPrivate
和:
protected function testPrivate() {
echo "<br>Bar::testPrivate\n";
}
您将获得预期的输出:
protected function testPrivate() {
echo "<br>Foo::testPrivate\n";
}
有关更多信息,您应该查看手册的Visibility部分 - 引用第一句话:
宣布公开的类成员可以 随处访问。
成员 声明受保护可以访问 只在班级本身和 继承和父类。
声明为私人的成员可以 只能被那个类访问 定义成员。