Bugs php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login

go to bug id or search bugs for

Bug #38478 reset() does not work as expected on Iterator implementations
Submitted: 2006年08月17日 08:20 UTC Modified: 2006年10月31日 23:32 UTC
From: toby@php.net Assigned: helly (profile)
Status: Not a bug Package: SPL related
PHP Version: 5.2.0 OS: *
Private report: No CVE-ID: None
[2006年08月17日 08:20 UTC] toby@php.net
Description:
------------
The Iterator interface (SPL) defines a method rewind(). When implementing e.g. ArrayIterator to allow array access to an object, one would expect that reset($object) would use the rewind method. This does not happen, but the first property is returned.
Reproduce code:
---------------
<?php
class testArray implements Iterator
{
 protected $prop = array(
 1 => 'one',
 2 => 'two',
 3 => 'three',
 );
 public function rewind()
 {
 return reset( $this->prop );
 }
 public function key()
 {
 return key( $this->prop );
 }
 public function current()
 {
 return current( $this->prop );
 }
 public function next()
 {
 return next( $this->prop );
 }
 public function valid()
 {
 return ( current( $this->prop ) !== false );
 }
}
$array = new testArray();
Expected result:
----------------
// Expected: string(3) "one"
var_dump( $array->rewind() );
// Expected: string(3) "one"
var_dump( reset( $array ) );
Actual result:
--------------
// As expected: string(3) "one"
var_dump( $array->rewind() );
// Expected: string(3) "one"
var_dump( reset( $array ) );
/* Got:
 array(3) {
 [1]=>
 string(3) "one"
 [2]=>
 string(3) "two"
 [3]=>
 string(5) "three"
 }
*/

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
[2006年10月31日 23:32 UTC] helly@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php
In PHP objects are also arrays of their properties and reset and friends only work on real arrays. Thus the result is correct.
PHP Copyright © 2001-2025 The PHP Group
All rights reserved. Last updated: Tue Sep 02 21:00:03 2025 UTC

AltStyle によって変換されたページ (->オリジナル) /