Re: class method visibility

From: 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.

« previous php.general (#317023) next »