ID:               16227
 Updated by:       [EMAIL PROTECTED]
-Summary:          Wrong zval allocation? while(list() = each()) behavior
                   is inconsistent due to th
 Reported By:      [EMAIL PROTECTED]
-Status:           Bogus
+Status:           Open
-Bug Type:         Arrays related
+Bug Type:         Documentation problem
 Operating System: ANY
-PHP Version:      4.2.0-dev
+PHP Version:      PHP4 only
 New Comment:

Ok. Then this is documentation problem.
(I would like to hear from Andi or Zeev, though)

There should be note that internal hash position is reset if value is
assigned. (Both LVALUE and RVLAUE. They are the same value anyway.)

Also, reference counting side effect should be documented fully.

BTW, to fix this misbihavior, we need a additional variable to keep
track of hash position for each zval. (and change related codes) PHP3
does not have problem, since it does not have reference counting. 
 





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

[2002-03-23 06:46:24] [EMAIL PROTECTED]

It's not a flaw, it's designed like this.

Derick

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

[2002-03-23 06:39:14] [EMAIL PROTECTED]

Derick, 

foreach() does not solve this bug.
ZendEngine is resetting internal hash position by an
assignment. Therefore, foreach() does does not work.

i.e. The issue is _not_ "Not resetting hash posisiton", but
"Incorrectly resetting RVALUE hash position by an assignment".

This is serious flaw in language.


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

[2002-03-23 06:01:49] [EMAIL PROTECTED]

Not a bug, but intended behavior. Use foreach().

Derick

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

[2002-03-22 20:55:39] [EMAIL PROTECTED]

BTW, I haven't check the exact behavior.
Zend might be resetting internal hash position due to the
assignment. 

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

[2002-03-22 20:48:18] [EMAIL PROTECTED]

I forgot about reset() since behavior is inconsistent :(

Anyway, this is still not right.
Zend engine is allocating new zval for $insidearray while
it should allocate $placeholder.
---
$placeholder = $insidearray;
               while(list(,$innerval) = each($insidearray)){
                       print "inloop $innerval for $outerval<br>";
---
This bug causes nasty bug in script.
If it is not easy to fix, may be we should suspend this bug?


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

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/16227

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

Reply via email to