ID: 49967
Updated by: [email protected]
-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