From:             ap at ath0 dot org
Operating system: Linux 2.6.7
PHP version:      5.0.0
PHP Bug Type:     Feature/Change Request
Bug description:  get_class_vars() returns unusable information

Description:
------------
When using get_class_vars() inside a class it does not act how it is
documented on php.net. But that is not the main problem. It seems as if
get_class_vars() is creating some strange identifiers in its resulting
array, making it effictively unusable.

I already found out, that protected members are prefixed by '*' and
private members are prepended with the classname, but the
identifier-string is longer, than it should be.
When accessing my test-program with a web-browser there are some weird
(probably multibyte) characters at the end of identifiers for protected
and private members, which don't show up in a terminal using the CLI
binary.

I'm not sure if this behaviour is expected (since it's not documented),
but there would be no point in having get_class_vars() returning something
that cannot be used subsequently.
And IMHO the Reflection-API behaves very differently; e.g. fetching class
attributes in at least 5 lines (via Reflaction API) vs. a one-line call to
fetch all attributes (via get_class_vars()).

Reproduce code:
---------------
class test {
    public $foo1;
    protected $foo2;
    private $foo3;
    public function __construct() {
        $this->foo1 = 'public';
        $this->foo2 = 'protected';
        $this->foo3 = 'private';
    }
}
$bar = array_keys(get_class_vars('test'));
var_dump($bar);


Expected result:
----------------
array(3) {
  [0]=>
  string(4) "foo1"
  [1]=>
  string(5) "*foo2"
  [2]=>
  string(8) "testfoo3"
}


Actual result:
--------------
array(3) {
  [0]=>
  string(4) "foo1"
  [1]=>
  string(7) "*foo2"
  [2]=>
  string(10) "testfoo3"
}


-- 
Edit bug report at http://bugs.php.net/?id=29509&edit=1
-- 
Try a CVS snapshot (php4):  http://bugs.php.net/fix.php?id=29509&r=trysnapshot4
Try a CVS snapshot (php5):  http://bugs.php.net/fix.php?id=29509&r=trysnapshot5
Fixed in CVS:               http://bugs.php.net/fix.php?id=29509&r=fixedcvs
Fixed in release:           http://bugs.php.net/fix.php?id=29509&r=alreadyfixed
Need backtrace:             http://bugs.php.net/fix.php?id=29509&r=needtrace
Need Reproduce Script:      http://bugs.php.net/fix.php?id=29509&r=needscript
Try newer version:          http://bugs.php.net/fix.php?id=29509&r=oldversion
Not developer issue:        http://bugs.php.net/fix.php?id=29509&r=support
Expected behavior:          http://bugs.php.net/fix.php?id=29509&r=notwrong
Not enough info:            http://bugs.php.net/fix.php?id=29509&r=notenoughinfo
Submitted twice:            http://bugs.php.net/fix.php?id=29509&r=submittedtwice
register_globals:           http://bugs.php.net/fix.php?id=29509&r=globals
PHP 3 support discontinued: http://bugs.php.net/fix.php?id=29509&r=php3
Daylight Savings:           http://bugs.php.net/fix.php?id=29509&r=dst
IIS Stability:              http://bugs.php.net/fix.php?id=29509&r=isapi
Install GNU Sed:            http://bugs.php.net/fix.php?id=29509&r=gnused
Floating point limitations: http://bugs.php.net/fix.php?id=29509&r=float

Reply via email to