From:             adove at booyahnetworks dot com
Operating system: WinXP
PHP version:      5.1.0RC1
PHP Bug Type:     SPL related
Bug description:  Inconsitent behavior in ArrayObject for multi-dimensional data

Description:
------------
If you create an ArrayObject with mutli-dimensional array data, you can
access unique element paths fine but you can not change/add any
multi-dimensional paths due to the dreaded "Fatal error: Objects used as
arrays in post/pre increment/decrement must return values by reference"
error. Note this happens in BOTH 5.0.5 AND 5.1.0RC1.

IMHO, either the documentation for ArrayObject should clearly indicate
that it supports uni-dimenisional data get/set and ONLY get for
multi-dimensional. OR, the object walk the passed data and turn all arrays
into ArrayObject instances? 

Reproduce code:
---------------
$a = array(
    "test" => array(
        "one" => "dunno",
        "two" => array(
            "peekabo" => "do you see me?",
            "anyone" => array("there")
            )
        )
    );
$oArray = new ArrayObject($a);
var_dump($oArray);
echo "\n\\test\\one == " . $oArray["test"]["one"] . "\n\n";

// NEITHER of the two below will work!
$oArray["test"]["one"] = "Yes I do!"; 
$oArray["test"]["yes"] = array(
    "hello" => "Goodbye!"
    );
var_dump($oArray);

Expected result:
----------------
object(ArrayObject)#1 (1) {
  ["test"]=>
  array(2) {
    ["one"]=>
    string(5) "dunno"
    ["two"]=>
    array(2) {
      ["peekabo"]=>
      string(14) "do you see me?"
      ["anyone"]=>
      array(1) {
        [0]=>
        string(5) "there"
      }
    }
  }
}

\test\one == dunno

object(ArrayObject)#1 (1) {
  ["test"]=>
  array(2) {
    ["one"]=>
    string(5) "Yes I do!"
    ["two"]=>
    array(2) {
      ["peekabo"]=>
      string(14) "do you see me?"
      ["anyone"]=>
      array(1) {
        [0]=>
        string(5) "there"
      }
    }
    ["yes"]=>
    array(1) {
        ["hello"]=>
        string(8) "Goodbye!"
    }
  }
}


Actual result:
--------------
object(ArrayObject)#1 (1) {
  ["test"]=>
  array(2) {
    ["one"]=>
    string(5) "dunno"
    ["two"]=>
    array(2) {
      ["peekabo"]=>
      string(14) "do you see me?"
      ["anyone"]=>
      array(1) {
        [0]=>
        string(5) "there"
      }
    }
  }
}

\test\one == dunno

Fatal error: Objects used as arrays in post/pre increment/decrement must
return values by reference in array_obje_test.php on line 16


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

Reply via email to