1--TEST-- 2Foreach loop tests - removing properties before and after the current property during the loop. 3--FILE-- 4<?php 5 6class C { 7 public $a = "Original a"; 8 public $b = "Original b"; 9 public $c = "Original c"; 10 public $d = "Original d"; 11 public $e = "Original e"; 12} 13 14echo "\nRemoving properties before the current element from an iterated object.\n"; 15$obj = new C; 16$count=0; 17foreach ($obj as $v) { 18 if ($v==$obj->a) { 19 unset($obj->c); 20 } 21 var_dump($v); 22 if (++$count>10) { 23 echo "Loop detected.\n"; 24 break; 25 } 26} 27var_dump($obj); 28 29echo "\nRemoving properties before the current element from an iterated object.\n"; 30$obj = new C; 31foreach ($obj as $v) { 32 if ($v==$obj->b) { 33 unset($obj->a); 34 } 35 var_dump($v); 36 if (++$count>10) { 37 echo "Loop detected.\n"; 38 break; 39 } 40} 41var_dump($obj); 42 43 44?> 45--EXPECTF-- 46Removing properties before the current element from an iterated object. 47string(10) "Original a" 48string(10) "Original b" 49string(10) "Original d" 50string(10) "Original e" 51object(C)#%d (4) { 52 ["a"]=> 53 string(10) "Original a" 54 ["b"]=> 55 string(10) "Original b" 56 ["d"]=> 57 string(10) "Original d" 58 ["e"]=> 59 string(10) "Original e" 60} 61 62Removing properties before the current element from an iterated object. 63string(10) "Original a" 64string(10) "Original b" 65string(10) "Original c" 66string(10) "Original d" 67string(10) "Original e" 68object(C)#%d (4) { 69 ["b"]=> 70 string(10) "Original b" 71 ["c"]=> 72 string(10) "Original c" 73 ["d"]=> 74 string(10) "Original d" 75 ["e"]=> 76 string(10) "Original e" 77} 78