#49967 [Opn]: Iteration over SplObjectStorage returns index=>object instead of object=>data

From: Date: Fri, 23 Oct 2009 10:27:32 +0000
Subject: #49967 [Opn]: Iteration over SplObjectStorage returns index=>object instead of object=>data
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-143831@lists.php.net to get a copy of this message
 ID:               49967
 User updated by:  an0nym at narod dot ru
 Reported By:      an0nym at narod dot ru
 Status:           Open
 Bug Type:         SPL related
 Operating System: *
 PHP Version:      5.3.0
 New Comment:

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);
}
?>


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

[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



Thread (7 messages)

« previous php.bugs (#143831) next »