From:             gdiego at gmail dot com
Operating system: Irrelevant
PHP version:      5.2.5
PHP Bug Type:     Arrays related
Bug description:  Operator precedence problem

Description:
------------
So, this is not really a bug itself but it's a problem.
Let's say we have:

class a {
  var $a = array('a'=>1);
[...] some functions [...]
};

Lets say a function inside the class does:
var_dump($this->a); //this will dump $a array of class a.
If we do var_dump($this->a['a']) it will dump integer 1.
If we do:
$z="a"; var_dump($this->$z); it will dump $a array of class a.
Since here all is working fine because $z is used as a pointer.
What happens with?
$z="a"; var_dump($this->$z['a']);
So, this will again dump the $a array in the class.

The problem here is the following, because of the operator precedence, the
index ['a'] is considered an index of $z which is a string. Then 'a' is
casted to integer and interpreted as 0.
$this->$z['a'] becomes the same as $this->$z[0] and, as $z[0] is 'a', this
becomes $this->a (the array).

This is not really a problem (even its not clear this precedence in the
documentation as posted in other bug).
My problem is that I couldn't find any way of telling the php interpreter
that ['a'] should be considered as an index for the whole expression.

($this->$a)['a'] gives syntax error and I have been trying to find a way
to do this without intermediate variables and couldn't figure out a
solution.

I know this example has no sense (who would really do this?) but still
think there should be a way to specify the precedence (and if there is, it
should be documentated in the operator precedence page, which lacks of the
-> operator by the way).

Thanks,
Diego



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

Reply via email to