#40757 [NEW]: get_object_vars get nothing in child class

Ask a Question related to PHP Bugs, Design and Development.

  1. #1

    Default #40757 [NEW]: get_object_vars get nothing in child class

    From: nrspark at 163 dot com
    Operating system: Windows XP
    PHP version: 5.2.1
    PHP Bug Type: Class/Object related
    Bug description: get_object_vars get nothing in child class

    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 bug report at [url]http://bugs.php.net/?id=40757&edit=1[/url]
    --
    Try a CVS snapshot (PHP 4.4): [url]http://bugs.php.net/fix.php?id=40757&r=trysnapshot44[/url]
    Try a CVS snapshot (PHP 5.2): [url]http://bugs.php.net/fix.php?id=40757&r=trysnapshot52[/url]
    Try a CVS snapshot (PHP 6.0): [url]http://bugs.php.net/fix.php?id=40757&r=trysnapshot60[/url]
    Fixed in CVS: [url]http://bugs.php.net/fix.php?id=40757&r=fixedcvs[/url]
    Fixed in release: [url]http://bugs.php.net/fix.php?id=40757&r=alreadyfixed[/url]
    Need backtrace: [url]http://bugs.php.net/fix.php?id=40757&r=needtrace[/url]
    Need Reproduce Script: [url]http://bugs.php.net/fix.php?id=40757&r=needscript[/url]
    Try newer version: [url]http://bugs.php.net/fix.php?id=40757&r=oldversion[/url]
    Not developer issue: [url]http://bugs.php.net/fix.php?id=40757&r=support[/url]
    Expected behavior: [url]http://bugs.php.net/fix.php?id=40757&r=notwrong[/url]
    Not enough info: [url]http://bugs.php.net/fix.php?id=40757&r=notenoughinfo[/url]
    Submitted twice: [url]http://bugs.php.net/fix.php?id=40757&r=submittedtwice[/url]
    register_globals: [url]http://bugs.php.net/fix.php?id=40757&r=globals[/url]
    PHP 3 support discontinued: [url]http://bugs.php.net/fix.php?id=40757&r=php3[/url]
    Daylight Savings: [url]http://bugs.php.net/fix.php?id=40757&r=dst[/url]
    IIS Stability: [url]http://bugs.php.net/fix.php?id=40757&r=isapi[/url]
    Install GNU Sed: [url]http://bugs.php.net/fix.php?id=40757&r=gnused[/url]
    Floating point limitations: [url]http://bugs.php.net/fix.php?id=40757&r=float[/url]
    No Zend Extensions: [url]http://bugs.php.net/fix.php?id=40757&r=nozend[/url]
    MySQL Configuration Error: [url]http://bugs.php.net/fix.php?id=40757&r=mysqlcfg[/url]
    nrspark at 163 dot com Guest

  2. Similar Questions and Discussions

    1. #33314 [NoF->Opn]: Child class variable change not propogated during function call
      ID: 33314 User updated by: gregory dot szorc at case dot edu Reported By: gregory dot szorc at case dot edu -Status: ...
    2. #33314 [Com]: Child class variable change not propogated during function call
      ID: 33314 Comment by: andrew at azarov dot com Reported By: gregory dot szorc at case dot edu Status: No...
    3. Parent/Child relations - Trying to access child control for save
      I have a parent datagrid that has my customer information. For each customer I have a child datagrid with all their part information. In the...
    4. [PHP-DEV] Accessing child constants from base class
      PHP5 10/10/2003 CVS. Currently, I don't see an easy way of accessing the constants of a child class from a base class. Consider the following...
    5. #23038 [Com]: PHP does not detect parent class inside child class' constructor
      ID: 23038 Comment by: hewei at ied dot org dot cn Reported By: black at sunshine dot krneki dot org Status: ...
  3. #2

    Default #40757 [Opn->Bgs]: get_object_vars get nothing in child class

    ID: 40757
    Updated by: [email]tony2001@php.net[/email]
    Reported By: nrspark at 163 dot com
    -Status: Open
    +Status: Bogus
    Bug Type: Class/Object related
    Operating System: Windows XP
    PHP Version: 5.2.1
    New Comment:

    I would be very surprised to be able to access private properties of
    Base in the context of Child.
    What you see is expected.


    Previous Comments:
    ------------------------------------------------------------------------

    [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 [url]http://bugs.php.net/?id=40757&edit=1[/url]
    tony2001@php.net Guest

  4. #3

    Default #40757 [Bgs->Opn]: get_object_vars get nothing in child class

    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:

    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


    Previous Comments:
    ------------------------------------------------------------------------

    [2007-03-09 10:14:42] [email]tony2001@php.net[/email]

    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 [url]http://bugs.php.net/?id=40757&edit=1[/url]
    nrspark at 163 dot com Guest

  5. #4

    Default #40757 [Opn->Bgs]: get_object_vars get nothing in child class

    ID: 40757
    Updated by: [email]tony2001@php.net[/email]
    Reported By: nrspark at 163 dot com
    -Status: Open
    +Status: Bogus
    Bug Type: Class/Object related
    Operating System: Windows XP
    PHP Version: 5.2.1
    New Comment:
    >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.


    Previous Comments:
    ------------------------------------------------------------------------

    [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]tony2001@php.net[/email]

    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 [url]http://bugs.php.net/?id=40757&edit=1[/url]
    tony2001@php.net Guest

  6. #5

    Default #40757 [Bgs->Opn]: get_object_vars get nothing in child class

    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]tony2001@php.net[/email]
    >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]tony2001@php.net[/email]

    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 [url]http://bugs.php.net/?id=40757&edit=1[/url]
    nrspark at 163 dot com Guest

Posting Permissions

  • You may not post new threads
  • You may post replies
  • You may not post attachments
  • You may not edit your posts

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139