Edit report at https://bugs.php.net/bug.php?id=63678&edit=1

 ID:                 63678
 Updated by:         le...@php.net
 Reported by:        Alex at phpguide dot co dot il
 Summary:            SplObjectStorage->current() !==
                     current(SplObjectStorage)
-Status:             Open
+Status:             Duplicate
 Type:               Bug
 Package:            SPL related
 Operating System:   debian 6
 PHP Version:        5.4.9
 Block user comment: N
 Private report:     N

 New Comment:

This is a duplicate of #49369 (https://bugs.php.net/bug.php?id=49369).


Previous Comments:
------------------------------------------------------------------------
[2012-12-04 00:25:55] mail+php at requinix dot net

SplObjectStorage provides ->current() as part of the implementation to 
Iterator/Traversable. If you want to call it directly you may need to obey the 
Iterator convention of calling ->rewind() first.

But doing so only changes the ->current() value to be the object and not null. 
Even with $blat->rewind() and reset($blat) both key() and current() behave 
differently. In the example for SplObjectStorage::current() it includes

$object = $s->current(); // similar to current($s)

so I would also expect them to behave the same.

tl;dr with ->rewind() and reset():
key($blat)==null, current($blat)==false
$blat->key()==0, $blat->current()==a test object

Without ->rewind() and reset():
key($blat)==null, current($blat)==false
$blat->key()==0, $blat->current()==null

------------------------------------------------------------------------
[2012-12-03 21:07:18] Alex at phpguide dot co dot il

Description:
------------
$SplObjectStorage->current() returns different value from
current($SplObjectStorage).


Test script:
---------------
class test
{
        public $val;
        
        public function __construct()
        {
                $this->val = rand();
        }
}

class blat extends \SplObjectStorage
{
        public function add()
        {
                $this->attach(new test());
        }
}

$blat = new blat();
$blat->add();
$blat->add();
$blat->add();
$blat->add();

var_dump($blat->current() === current($blat));
// null === false

Expected result:
----------------
true

Actual result:
--------------
false


------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=63678&edit=1

Reply via email to