ID:               47031
 Comment by:       jpetso at gmx dot at
 Reported By:      jpetso at gmx dot at
 Status:           Open
 Bug Type:         SPL related
 Operating System: all
 PHP Version:      5.3.0alpha3
 New Comment:

The diff to fix the bug.

--- dualiterator.1.4.inc        2009-01-07 19:47:18.000000000 +0100
+++ dualiterator.fixed.inc      2009-01-07 20:01:31.000000000 +0100
@@ -23,10 +23,9 @@ class DualIterator implements Iterator
 
        const KEY_LHS   = 0x10;
        const KEY_RHS   = 0x20;
-       const KEY_ARRAY = 0x30;
        const KEY_0     = 0x00;
        
-       const DEFAULT_FLAGS = 0x33;
+       const DEFAULT_FLAGS = 0x13;
        
        private $lhs;
        private $rhs;
@@ -114,13 +113,11 @@ class DualIterator implements Iterator
                switch($this->flags & 0xF0)
                {
                default:
-               case self::CURRENT_ARRAY:
-                       return array($this->lhs->key(), $this->rhs-
-               case self::CURRENT_LHS:
+               case self::KEY_LHS:
                        return $this->lhs->key();
-               case self::CURRENT_RHS:
+               case self::KEY_RHS:
                        return $this->rhs->key();
-               case self::CURRENT_0:
+               case self::KEY_0:
                        return NULL;
                }
        }


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

[2009-01-07 19:03:29] jpetso at gmx dot at

Description:
------------
Regarding the DualIterator example, current version:
http://cvs.php.net/viewvc.cgi/php-

In its API documentation, the key() method claims to use the
DualIterator::KEY_* constants, but the code makes use of CURRENT_*
instead.

Also, does the *_ARRAY option (which is used by default even for
key()) does not make a lot of sense because arrays cannot be used as
keys at least for foreach loops. (Might work with low-level iterator
usage, but then again keys should probably be *real* keys in any
case.)

It would be nice to have these issues fixed (diff attached further
down).

Related feature request, totally not in scope for this bug report
(sorry): it might be worthwhile to extend the flags to
{CURRENT,KEY}_{LHS,RHS}_{KEY,VALUE} in order to make it possible to
e.g. use the left hand side's current value as key for the iterator.
At least, that's what I'm going to use my derived class for.

Thanks for having a look (and for your work on PHP), regards,
  Jakob

Reproduce code:
---------------
$leftSideArray = array('lhs_key' => 'lhs_value');
$rightSideArray = array('rhs_key' => 'rhs_value');

$combined = new DualIterator(
  new ArrayIterator($leftSideArray), new
ArrayIterator($rightSideArray),
  DualIterator::KEY_LHS | DualIterator::CURRENT_RHS
);

foreach ($combined as $key => $value) {
  var_dump($key);
  var_dump($value);
}

Expected result:
----------------
string(7) "lhs_key"
string(9) "rhs_value"

Actual result:
--------------
Warning: Illegal type returned from DualIterator::key() in
/home/jakob/dev/www/drupal/6/transformations/sites/all/modules/tf_modu
line 223

Call Stack:
    0.0014     112544   1. {main}()
/home/jakob/dev/www/drupal/6/transformations/sites/all/modules/tf_modu

int(0)
string(9) "rhs_value"


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


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

Reply via email to