Re: class method visibility
| From: | Matijn Woudt | Date: | Thu, 15 Mar 2012 16:11:52 +0000 |
| Subject: | Re: class method visibility | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-317023@lists.php.net to get a copy of this message | ||
2012/3/15 Jeremy Wei <shuimuqingshu@gmail.com>:
> I read the manual about method visibility, but i can't understand the
> code below:
> <?php
> 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
> ?>
>
> in class Bar's method test, why "$this->testPrivate();" invoked
> testPrivate method of class Bar,
> but not the testPrivate of class Foo? here $this shoud be the
> reference of the instance of class Foo,
> isn't it?
>
Since you're executing this from the class Bar, the only visible
testPrivate function there is Bar::testPrivate. This would work the
way you expect it only if the test() function was inside class Foo.