Annotation of embedaddon/php/tests/lang/foreachLoop.010.phpt, revision 1.1.1.1

1.1       misho       1: --TEST--
                      2: This test illustrates the impact of invoking destructors when refcount is decremented to 0 on foreach.
                      3: It will pass only if the 'contentious code' in PHPValue.decReferences() is enabled.
                      4: --FILE--
                      5: <?php
                      6: 
                      7: $a = array(1,2,3);
                      8: $container = array(&$a);
                      9: 
                     10: // From php.net:  
                     11: //   "Unless the array is referenced, foreach operates on a copy of
                     12: //    the specified array and not the array itself."
                     13: // At this point, the array $a is referenced.
                     14: 
                     15: // The following line ensures $a is no longer references as a consequence
                     16: // of running the 'destructor' on $container.  
                     17: $container = null;
                     18: 
                     19: // At this point the array $a is no longer referenced, so foreach should operate on a copy of the array.
                     20: // However, P8 does not invoke 'destructors' when refcount is decremented to 0.
                     21: // Consequently, $a thinks it is still referenced, and foreach will operate on the array itself.
                     22: // This provokes a difference in behaviour when changing the number of elements in the array while
                     23: // iterating over it.  
                     24: 
                     25: $i=0;
                     26: foreach ($a as $v) {
                     27:        array_push($a, 'new');
                     28:        var_dump($v);
                     29:        
                     30:        if (++$i>10) {
                     31:                echo "Infinite loop detected\n";
                     32:                break;
                     33:        }
                     34: }
                     35: 
                     36: ?>
                     37: --EXPECTF--
                     38: int(1)
                     39: int(2)
                     40: int(3)

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>