php OOP - 与方法可见性相关

时间:2011-03-17 06:33:41

标签: php oop

检查下面给出的代码。我无法理解它如何调用Class Bar类的testPrivate()方法。根据我的假设,它应该从Foo类调用方法,即Foo :: testPrivate。

Check the demo here

 <?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
    ?>

2 个答案:

答案 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部分 - 引用第一句话:

  

宣布公开的类成员可以   随处访问。
成员   声明受保护可以访问   只在班级本身和   继承和父类。   
声明为私人的成员可以   只能被那个类访问   定义成员。