From: info at adaniels dot nl Operating system: Linux / Ubuntu 9.04 PHP version: 5.3.0 PHP Bug Type: Feature/Change Request Bug description: Call ArrayObject::getArrayCopy() when casting an ArrayObject to an array
Description: ------------ It would be nice if you could affect the behaviour of casting an ArrayObject to an array by overloading the getArrayCopy() method. This would be usefull to create lazy load arrays. Reproduce code: --------------- <?php class Items extends ArrayObject { /** * Stub for loading an item. * @return object */ public function load($id) { return (object)(array('id'=>$id)); } public function offsetGet($key) { $item = parent::offsetGet($key); if (!is_object($item)) { $item = $this->load($item); $this->offsetSet($key, $item); } return $item; } public function getArrayCopy() { $array = parent::getArrayCopy(); foreach ($array as $i=>&$item) { if (!is_object($item)) { $item = $this->load($item); $this->offsetSet($i, $item); } } return $array; } } $a = new Items(); $a[] = 'jan'; $a[] = 'piet'; var_dump($a[0]); var_dump((array)$a); Expected result: ---------------- object(stdClass)#2 (1) { ["id"]=> string(3) "jan" } array(2) { [0]=> object(stdClass)#2 (1) { ["id"]=> string(3) "jan" } [1]=> object(stdClass)#3 (1) { ["id"]=> string(4) "piet" } } Actual result: -------------- object(stdClass)#2 (1) { ["id"]=> string(3) "jan" } array(2) { [0]=> object(stdClass)#2 (1) { ["id"]=> string(3) "jan" } [1]=> string(4) "piet" } -- Edit bug report at http://bugs.php.net/?id=49454&edit=1 -- Try a snapshot (PHP 5.2): http://bugs.php.net/fix.php?id=49454&r=trysnapshot52 Try a snapshot (PHP 5.3): http://bugs.php.net/fix.php?id=49454&r=trysnapshot53 Try a snapshot (PHP 6.0): http://bugs.php.net/fix.php?id=49454&r=trysnapshot60 Fixed in SVN: http://bugs.php.net/fix.php?id=49454&r=fixed Fixed in SVN and need be documented: http://bugs.php.net/fix.php?id=49454&r=needdocs Fixed in release: http://bugs.php.net/fix.php?id=49454&r=alreadyfixed Need backtrace: http://bugs.php.net/fix.php?id=49454&r=needtrace Need Reproduce Script: http://bugs.php.net/fix.php?id=49454&r=needscript Try newer version: http://bugs.php.net/fix.php?id=49454&r=oldversion Not developer issue: http://bugs.php.net/fix.php?id=49454&r=support Expected behavior: http://bugs.php.net/fix.php?id=49454&r=notwrong Not enough info: http://bugs.php.net/fix.php?id=49454&r=notenoughinfo Submitted twice: http://bugs.php.net/fix.php?id=49454&r=submittedtwice register_globals: http://bugs.php.net/fix.php?id=49454&r=globals PHP 4 support discontinued: http://bugs.php.net/fix.php?id=49454&r=php4 Daylight Savings: http://bugs.php.net/fix.php?id=49454&r=dst IIS Stability: http://bugs.php.net/fix.php?id=49454&r=isapi Install GNU Sed: http://bugs.php.net/fix.php?id=49454&r=gnused Floating point limitations: http://bugs.php.net/fix.php?id=49454&r=float No Zend Extensions: http://bugs.php.net/fix.php?id=49454&r=nozend MySQL Configuration Error: http://bugs.php.net/fix.php?id=49454&r=mysqlcfg