ID: 40757
User updated by: nrspark at 163 dot com
Reported By: nrspark at 163 dot com
-Status: Bogus
+Status: Open
Bug Type: Class/Object related
Operating System: Windows XP
PHP Version: 5.2.1
New Comment:
code 1: use get_object_vars
1>I would be very surprised to be able to access private properties of
1>Base in the context of Child.
code 2: direct access
2>Surely Base class can access it's own private properties.
2>The method belongs to the Base and is executed in it's scope.
$child=new Child();
$child->getFields(new Base());
what is the context of the method? base or child?
the result direct access and get_object_vars must be the same.
it is a bug that the get_object_vars function do not check the method
belongs to, but just check the object class call the method.
Previous Comments:
------------------------------------------------------------------------
[2007-03-13 11:38:52] [EMAIL PROTECTED]
>but it works expect if the method change to this
>function getFields($obj){ return array('p1'=>$obj->p1); }
Surely Base class can access it's own private properties.
The method belongs to the Base and is executed in it's scope.
------------------------------------------------------------------------
[2007-03-09 13:06:23] nrspark at 163 dot com
but it works expect if the method change to this
function getFields($obj){
return array('p1'=>$obj->p1);
}
and it work expect in java using reflection
think about: Liskov Substitution Principle
i thing this is the implemention bug of get_object_vars
------------------------------------------------------------------------
[2007-03-09 10:14:42] [EMAIL PROTECTED]
I would be very surprised to be able to access private properties of
Base in the context of Child.
What you see is expected.
------------------------------------------------------------------------
[2007-03-08 12:05:12] nrspark at 163 dot com
Description:
------------
method to get the private properties of the base object
in base class object, everything ok
in child class use inherit method, get empty
Reproduce code:
---------------
class Base {
private $p1='sadf';
function getFields($obj){
return get_object_vars($obj);
}
}
class Child extends Base { }
$base=new Base();
print_r($base->getFields(new Base()));
$child=new Child();
print_r($child->getFields(new Base()));
Expected result:
----------------
Array ( [p1] => sadf )Array ( [p1] => sadf )
Actual result:
--------------
Array ( [p1] => sadf ) Array ( )
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=40757&edit=1