Edit report at https://bugs.php.net/bug.php?id=62045&edit=1

 ID:                 62045
 Updated by:         cataphr...@php.net
 Reported by:        gonzalo123 at gmail dot com
 Summary:            public access to a protected method
 Status:             Not a bug
 Type:               Bug
 Package:            Class/Object related
 Operating System:   Linux
 PHP Version:        5.3.13
 Block user comment: N
 Private report:     N

 New Comment:

read: "is the same in"


Previous Comments:
------------------------------------------------------------------------
[2012-05-16 14:14:39] cataphr...@php.net

Right. But it doesn't change anything. The type is only important to decide 
what the foo() method is, and foo() is AnotherClass and OneClass.

------------------------------------------------------------------------
[2012-05-16 13:15:57] gonzalo123 at gmail dot com

$this->object is not an instance of OneClass. 
$this->object is an instance of AnotherClass (look at the constructor).

------------------------------------------------------------------------
[2012-05-16 11:36:49] cataphr...@php.net

$this->object is an instance of OneClass. $this->object->foo() is called. foo() 
is protected and was defined in the context of OneClass. The access is done in 
the context of AnotherClass.  AnotherClass is a subclass of OneClass (the 
context where foo() was defined). Therefore access is granted. I don't know 
what's your problem here.

------------------------------------------------------------------------
[2012-05-16 09:00:32] gonzalo123 at gmail dot com

But we are not accesing OneClass::foo. This access is allowed beacause of the 
extends,we should not have access to use $this->object->foo();

$this is an instance of OneClass (it extends AnotherClass) but $this->object 
(we 
load it with DI) is an instance of AnotherClass. foo is protected here and we 
are 
accesing as a public method.

------------------------------------------------------------------------
[2012-05-16 08:51:07] cataphr...@php.net

Access is granted on a class, not instance basis. This is by design.

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=62045


-- 
Edit this bug report at https://bugs.php.net/bug.php?id=62045&edit=1

Reply via email to