ID:               49967
 Updated by:       col...@php.net
-Summary:          Iteration over SplObjectStorage returns index=>object
                   instead of object=>data
 Reported By:      an0nym at narod dot ru
 Status:           Open
-Bug Type:         SPL related
+Bug Type:         Feature/Change Request
 Operating System: *
 PHP Version:      5.3.0
 New Comment:

This is indeed a limitation of the iteration process itself, nothing
specific to splobjectstorage.


Previous Comments:
------------------------------------------------------------------------

[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 http://bugs.php.net/?id=49967&edit=1

Reply via email to