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

 ID:                 62045
 User updated by:    gonzalo123 at gmail dot com
 Reported by:        gonzalo123 at gmail dot com
-Summary:            public access to a protectec method
+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:

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.


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

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

------------------------------------------------------------------------
[2012-05-16 08:23:45] gonzalo123 at gmail dot com

Description:
------------
This code works, but it shouldn't, because AnotherClass::foo is protected.

It works only if "OneClass" extends "AnotherClass". If we dont't extends 
"OneClass" with "AnotherClass" (in this example we don't need it) we will see 
the 
normal error:

Fatal error: Call to protected method AnotherClass::foo() from context 
'OneClass'


Test script:
---------------
class AnotherClass {
    protected function foo() {
        return "bar";
    }
}
class OneClass extends AnotherClass {
    private $object;
    public function __construct(AnotherClass $object) {
        $this->object = $object;
    }
    public function myFunction() {
        return $this->object->foo();
    }
}
$obj = new OneClass(new AnotherClass());
echo $obj->myFunction();

Expected result:
----------------
Fatal error: Call to protected method AnotherClass::foo() from context 
'OneClass'

Actual result:
--------------
"bar" (without Fatal error)


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



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

Reply via email to