Edit report at https://bugs.php.net/bug.php?id=49967&edit=1
ID: 49967 Updated by: le...@php.net Reported by: an0nym at narod dot ru Summary: Custom iteration cannot return keys other than ints or strings -Status: Assigned +Status: Closed Type: Feature/Change Request Package: Scripting Engine problem Operating System: * PHP Version: 5.3.0 Assigned To: colder Block user comment: N Private report: N New Comment: As of PHP 5.5, this is now fixed. Previous Comments: ------------------------------------------------------------------------ [2009-11-11 12:13:28] col...@php.net This is indeed a limitation of the iteration process itself, nothing specific to splobjectstorage. ------------------------------------------------------------------------ [2009-10-23 10:27:31] an0nym at narod dot ru Ah, it seems that foreach can't handle anything non-scalar as a key. What a pity. I think this should be changed in the future, because it limits the use of Iterators. For instance, I can't use something like: <?php class MapObjectData extends SplObjectStorage { public function key () { return parent::current (); } public function current () { return parent::getInfo (); } } $spl = new MapObjectData (); $spl[new StdClass ()] = 'a'; $spl[new StdClass ()] = 'b'; foreach ($spl as $object => $data) { var_dump ($object, $data); } ?> ------------------------------------------------------------------------ [2009-10-23 10:08:10] an0nym at narod dot ru Description: ------------ Iteration over SplObjectStorage returns unexpected results: internal index => associated object instead of object => associated data. Reproduce code: --------------- <?php $spl = new SplObjectStorage (); $spl[new StdClass ()] = 'a'; $spl[new StdClass ()] = 'b'; foreach ($spl as $object => $data) { var_dump ($object, $data); } ?> Expected result: ---------------- object(stdClass)#2 (0) { } string(1) "a" object(stdClass)#3 (0) { } string(1) "b" Actual result: -------------- int(0) object(stdClass)#2 (0) { } int(1) object(stdClass)#2 (0) { } ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=49967&edit=1