On 26/03/2008, Richard Quadling <[EMAIL PROTECTED]> wrote: > On 25/03/2008, Felipe Pena <[EMAIL PROTECTED]> wrote: > > > Em Ter, 2008-03-25 às 12:35 +0100, Lars Strojny escreveu: > > > > > Would that mean that the following code does not work anymore? > > > > > > <?php > > > class Foo > > > { > > > protected function method() > > > { > > > } > > > > > > public function doSomething(Foo $foo) > > > { > > > $foo->method(); > > > } > > > } > > > > > > $foo1 = new Foo(); > > > $foo1->doSomething(new Foo()); > > > > > > > > > This still will works. > > > Surely it shouldn't work at all unless the $foo === $this? > > I understand that the checking is based upon the class and not the instance. > > Shouldn't the instance be the limiting factor? > > Richard.
Maybe what I am saying is a little clearer if you change protected to private. <?php class Foo { private function priv() { echo __METHOD__, ':', __LINE__, PHP_EOL; } protected function prot() { echo __METHOD__, ':', __LINE__, PHP_EOL; } public function doSomething(Foo $foo) { $foo->prot(); $foo->priv(); } } class Bar extends Foo { protected function prot() { echo __METHOD__, ':', __LINE__, PHP_EOL; } } $foo1 = new Foo(); $foo1->doSomething(new Bar()); outputs (PHP 5.3.0-dev (cli) (built: Mar 18 2008 04:17:56)) Bar::prot:19 Foo::priv:4 It just doesn't seem right to be able to call a private or protected method of another instance. Sort of isn't private any more. And as for being able to call a protected method of a completely different class, just because it shares the same ancestry. That seems REALLY wrong. Richard. -- ----- Richard Quadling Zend Certified Engineer : http://zend.com/zce.php?c=ZEND002498&r=213474731 "Standing on the shoulders of some very clever giants!"