wharmby Sun Jun 14 14:17:46 2009 UTC Added files: /php-src/tests/lang foreachLoopObjects.001.phpt foreachLoopObjects.006.phpt foreachLoopObjects.003.phpt foreachLoopObjects.002.phpt foreachLoopObjects.005.phpt foreachLoopObjects.004.phpt Log: New foreach tests. Tested on Windows, Linux and Linux 64 bit.
http://cvs.php.net/viewvc.cgi/php-src/tests/lang/foreachLoopObjects.001.phpt?view=markup&rev=1.1 Index: php-src/tests/lang/foreachLoopObjects.001.phpt +++ php-src/tests/lang/foreachLoopObjects.001.phpt --TEST-- Foreach loop on objects - basic loop with just value and key => value. --FILE-- <?php
class C { public $a = "Original a"; public $b = "Original b"; public $c = "Original c"; protected $d = "Original d"; private $e = "Original e"; } echo "\n\nSimple loop.\n"; $obj = new C; foreach ($obj as $v) { var_dump($v); } foreach ($obj as $k => $v) { var_dump($k, $v); } echo "\nCheck key and value after the loop.\n"; var_dump($k, $v); echo "\n\nObject instantiated inside loop.\n"; foreach (new C as $v) { var_dump($v); } foreach (new C as $k => $v) { var_dump($k, $v); } echo "\nCheck key and value after the loop.\n"; var_dump($k, $v); ?> --EXPECTF-- Simple loop. unicode(10) "Original a" unicode(10) "Original b" unicode(10) "Original c" unicode(1) "a" unicode(10) "Original a" unicode(1) "b" unicode(10) "Original b" unicode(1) "c" unicode(10) "Original c" Check key and value after the loop. unicode(1) "c" unicode(10) "Original c" Object instantiated inside loop. unicode(10) "Original a" unicode(10) "Original b" unicode(10) "Original c" unicode(1) "a" unicode(10) "Original a" unicode(1) "b" unicode(10) "Original b" unicode(1) "c" unicode(10) "Original c" Check key and value after the loop. unicode(1) "c" unicode(10) "Original c" http://cvs.php.net/viewvc.cgi/php-src/tests/lang/foreachLoopObjects.006.phpt?view=markup&rev=1.1 Index: php-src/tests/lang/foreachLoopObjects.006.phpt +++ php-src/tests/lang/foreachLoopObjects.006.phpt --TEST-- Foreach loop tests - substituting the entire iterated entity during the loop. --FILE-- <?php class C { public $a = "Original a"; public $b = "Original b"; public $c = "Original c"; public $d = "Original d"; public $e = "Original e"; } echo "\nSubstituting the iterated object for a different object.\n"; $obj = new C; $obj2 = new stdclass; $obj2->a = "new a"; $obj2->b = "new b"; $obj2->c = "new c"; $obj2->d = "new d"; $obj2->e = "new e"; $obj2->f = "new f"; $ref = &$obj; $count=0; foreach ($obj as $v) { var_dump($v); if ($v==$obj->b) { $ref=$obj2; } if (++$count>10) { echo "Loop detected.\n"; break; } } var_dump($obj); echo "\nSubstituting the iterated object for an array.\n"; $obj = new C; $a = array(1,2,3,4,5,6,7,8); $ref = &$obj; $count=0; foreach ($obj as $v) { var_dump($v); if ($v==="Original b") { $ref=$a; } if (++$count>10) { echo "Loop detected.\n"; break; } } var_dump($obj); echo "\nSubstituting the iterated array for an object.\n"; $a = array(1,2,3,4,5,6,7,8); $obj = new C; $ref = &$a; $count=0; foreach ($a as $v) { var_dump($v); if ($v===2) { $ref=$obj; } if (++$count>10) { echo "Loop detected.\n"; break; } } var_dump($obj); ?> ===DONE=== --EXPECTF-- Substituting the iterated object for a different object. unicode(10) "Original a" unicode(10) "Original b" unicode(5) "new a" unicode(5) "new b" unicode(5) "new c" unicode(5) "new d" unicode(5) "new e" unicode(5) "new f" object(stdClass)#%d (6) { [u"a"]=> unicode(5) "new a" [u"b"]=> unicode(5) "new b" [u"c"]=> unicode(5) "new c" [u"d"]=> unicode(5) "new d" [u"e"]=> unicode(5) "new e" [u"f"]=> unicode(5) "new f" } Substituting the iterated object for an array. unicode(10) "Original a" unicode(10) "Original b" int(1) int(2) int(3) int(4) int(5) int(6) int(7) int(8) array(8) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(6) [6]=> int(7) [7]=> int(8) } Substituting the iterated array for an object. int(1) int(2) unicode(10) "Original a" unicode(10) "Original b" unicode(10) "Original c" unicode(10) "Original d" unicode(10) "Original e" object(C)#1 (5) { [u"a"]=> unicode(10) "Original a" [u"b"]=> unicode(10) "Original b" [u"c"]=> unicode(10) "Original c" [u"d"]=> unicode(10) "Original d" [u"e"]=> unicode(10) "Original e" } ===DONE=== http://cvs.php.net/viewvc.cgi/php-src/tests/lang/foreachLoopObjects.003.phpt?view=markup&rev=1.1 Index: php-src/tests/lang/foreachLoopObjects.003.phpt +++ php-src/tests/lang/foreachLoopObjects.003.phpt --TEST-- Foreach loop tests - modifying the object during the loop. --FILE-- <?php class C { public $a = "Original a"; public $b = "Original b"; public $c = "Original c"; protected $d = "Original d"; private $e = "Original e"; } echo "\nDirectly changing object values.\n"; $obj = new C; foreach ($obj as $k=>$v) { $obj->$k="changed.$k"; var_dump($v); } var_dump($obj); echo "\nModifying the foreach \$value.\n"; $obj = new C; foreach ($obj as $k=>$v) { $v="changed.$k"; } var_dump($obj); echo "\nModifying the foreach &\$value.\n"; $obj = new C; foreach ($obj as $k=>&$v) { $v="changed.$k"; } var_dump($obj); echo "\nAdding properties to an an object.\n"; $obj = new C; $counter=0; foreach ($obj as $v) { $newPropName = "new$counter"; $obj->$newPropName = "Added property $counter"; if ($counter++>10) { echo "Loop detected\n"; break; } var_dump($v); } var_dump($obj); echo "\nAdding properties to an an object, using &\$value.\n"; $obj = new C; $counter=0; foreach ($obj as &$v) { $newPropName = "new$counter"; $obj->$newPropName = "Added property $counter"; if ($counter++>10) { echo "Loop detected\n"; break; } var_dump($v); } var_dump($obj); echo "\nRemoving properties from an object.\n"; $obj = new C; foreach ($obj as $v) { unset($obj->a); unset($obj->b); unset($obj->c); var_dump($v); } var_dump($obj); echo "\nRemoving properties from an object, using &\$value.\n"; $obj = new C; foreach ($obj as &$v) { unset($obj->a); unset($obj->b); unset($obj->c); var_dump($v); } var_dump($obj); ?> ===DONE=== --EXPECTF-- Directly changing object values. unicode(10) "Original a" unicode(10) "Original b" unicode(10) "Original c" object(C)#%d (5) { [u"a"]=> unicode(9) "changed.a" [u"b"]=> unicode(9) "changed.b" [u"c"]=> unicode(9) "changed.c" [u"d":protected]=> unicode(10) "Original d" [u"e":u"C":private]=> unicode(10) "Original e" } Modifying the foreach $value. object(C)#%d (5) { [u"a"]=> unicode(10) "Original a" [u"b"]=> unicode(10) "Original b" [u"c"]=> unicode(10) "Original c" [u"d":protected]=> unicode(10) "Original d" [u"e":u"C":private]=> unicode(10) "Original e" } Modifying the foreach &$value. object(C)#%d (5) { [u"a"]=> unicode(9) "changed.a" [u"b"]=> unicode(9) "changed.b" [u"c"]=> &unicode(9) "changed.c" [u"d":protected]=> unicode(10) "Original d" [u"e":u"C":private]=> unicode(10) "Original e" } Adding properties to an an object. unicode(10) "Original a" unicode(10) "Original b" unicode(10) "Original c" unicode(16) "Added property 0" unicode(16) "Added property 1" unicode(16) "Added property 2" unicode(16) "Added property 3" unicode(16) "Added property 4" unicode(16) "Added property 5" unicode(16) "Added property 6" unicode(16) "Added property 7" Loop detected object(C)#%d (17) { [u"a"]=> unicode(10) "Original a" [u"b"]=> unicode(10) "Original b" [u"c"]=> unicode(10) "Original c" [u"d":protected]=> unicode(10) "Original d" [u"e":u"C":private]=> unicode(10) "Original e" [u"new0"]=> unicode(16) "Added property 0" [u"new1"]=> unicode(16) "Added property 1" [u"new2"]=> unicode(16) "Added property 2" [u"new3"]=> unicode(16) "Added property 3" [u"new4"]=> unicode(16) "Added property 4" [u"new5"]=> unicode(16) "Added property 5" [u"new6"]=> unicode(16) "Added property 6" [u"new7"]=> unicode(16) "Added property 7" [u"new8"]=> unicode(16) "Added property 8" [u"new9"]=> unicode(16) "Added property 9" [u"new10"]=> unicode(17) "Added property 10" [u"new11"]=> unicode(17) "Added property 11" } Adding properties to an an object, using &$value. unicode(10) "Original a" unicode(10) "Original b" unicode(10) "Original c" unicode(16) "Added property 0" unicode(16) "Added property 1" unicode(16) "Added property 2" unicode(16) "Added property 3" unicode(16) "Added property 4" unicode(16) "Added property 5" unicode(16) "Added property 6" unicode(16) "Added property 7" Loop detected object(C)#%d (17) { [u"a"]=> unicode(10) "Original a" [u"b"]=> unicode(10) "Original b" [u"c"]=> unicode(10) "Original c" [u"d":protected]=> unicode(10) "Original d" [u"e":u"C":private]=> unicode(10) "Original e" [u"new0"]=> unicode(16) "Added property 0" [u"new1"]=> unicode(16) "Added property 1" [u"new2"]=> unicode(16) "Added property 2" [u"new3"]=> unicode(16) "Added property 3" [u"new4"]=> unicode(16) "Added property 4" [u"new5"]=> unicode(16) "Added property 5" [u"new6"]=> unicode(16) "Added property 6" [u"new7"]=> unicode(16) "Added property 7" [u"new8"]=> &unicode(16) "Added property 8" [u"new9"]=> unicode(16) "Added property 9" [u"new10"]=> unicode(17) "Added property 10" [u"new11"]=> unicode(17) "Added property 11" } Removing properties from an object. unicode(10) "Original a" object(C)#%d (2) { [u"d":protected]=> unicode(10) "Original d" [u"e":u"C":private]=> unicode(10) "Original e" } Removing properties from an object, using &$value. unicode(10) "Original a" object(C)#%d (2) { [u"d":protected]=> unicode(10) "Original d" [u"e":u"C":private]=> unicode(10) "Original e" } ===DONE=== http://cvs.php.net/viewvc.cgi/php-src/tests/lang/foreachLoopObjects.002.phpt?view=markup&rev=1.1 Index: php-src/tests/lang/foreachLoopObjects.002.phpt +++ php-src/tests/lang/foreachLoopObjects.002.phpt --TEST-- Foreach loop tests - visibility. --FILE-- <?php class C { public $a = "Original a"; public $b = "Original b"; public $c = "Original c"; protected $d = "Original d"; private $e = "Original e"; function doForEachC() { echo "in C::doForEachC\n"; foreach ($this as $k=>&$v) { var_dump($v); $v="changed.$k"; } } static function doForEach($obj) { echo "in C::doForEach\n"; foreach ($obj as $k=>&$v) { var_dump($v); $v="changed.$k"; } } function doForEachOnThis() { echo "in C::doForEachOnThis\n"; foreach ($this as $k=>&$v) { var_dump($v); $v="changed.$k"; } } } class D extends C { private $f = "Original f"; protected $g = "Original g"; static function doForEach($obj) { echo "in D::doForEach\n"; foreach ($obj as $k=>&$v) { var_dump($v); $v="changed.$k"; } } function doForEachOnThis() { echo "in D::doForEachOnThis\n"; foreach ($this as $k=>&$v) { var_dump($v); $v="changed.$k"; } } } class E extends D { public $a = "Overridden a"; public $b = "Overridden b"; public $c = "Overridden c"; protected $d = "Overridden d"; private $e = "Overridden e"; static function doForEach($obj) { echo "in E::doForEach\n"; foreach ($obj as $k=>&$v) { var_dump($v); $v="changed.$k"; } } function doForEachOnThis() { echo "in E::doForEachOnThis\n"; foreach ($this as $k=>&$v) { var_dump($v); $v="changed.$k"; } } } echo "\n\nIterate over various generations from within overridden methods:\n"; echo "\n--> Using instance of C:\n"; $myC = new C; $myC->doForEachOnThis(); var_dump($myC); echo "\n--> Using instance of D:\n"; $myD = new D; $myD->doForEachOnThis(); var_dump($myD); echo "\n--> Using instance of E:\n"; $myE = new E; $myE->doForEachOnThis(); var_dump($myE); echo "\n\nIterate over various generations from within an inherited method:\n"; echo "\n--> Using instance of C:\n"; $myC = new C; $myC->doForEachC(); var_dump($myC); echo "\n--> Using instance of D:\n"; $myD = new D; $myD->doForEachC(); var_dump($myD); echo "\n--> Using instance of E:\n"; $myE = new E; $myE->doForEachC(); var_dump($myE); echo "\n\nIterate over various generations from within an overridden static method:\n"; echo "\n--> Using instance of C:\n"; $myC = new C; C::doForEach($myC); var_dump($myC); $myC = new C; D::doForEach($myC); var_dump($myC); $myC = new C; E::doForEach($myC); var_dump($myC); echo "\n--> Using instance of D:\n"; $myD = new D; C::doForEach($myD); var_dump($myD); $myD = new D; D::doForEach($myD); var_dump($myD); $myD = new D; E::doForEach($myD); var_dump($myD); echo "\n--> Using instance of E:\n"; $myE = new E; C::doForEach($myE); var_dump($myE); $myE = new E; D::doForEach($myE); var_dump($myE); $myE = new E; E::doForEach($myE); var_dump($myE); echo "\n\nIterate over various generations from outside the object:\n"; echo "\n--> Using instance of C:\n"; $myC = new C; foreach ($myC as $k=>&$v) { var_dump($v); $v="changed.$k"; } var_dump($myC); echo "\n--> Using instance of D:\n"; $myD = new D; foreach ($myD as $k=>&$v) { var_dump($v); $v="changed.$k"; } var_dump($myD); echo "\n--> Using instance of E:\n"; $myE = new E; foreach ($myE as $k=>&$v) { var_dump($v); $v="changed.$k"; } var_dump($myE); ?> ===DONE=== --EXPECTF-- Iterate over various generations from within overridden methods: --> Using instance of C: in C::doForEachOnThis unicode(10) "Original a" unicode(10) "Original b" unicode(10) "Original c" unicode(10) "Original d" unicode(10) "Original e" object(C)#%d (5) { [u"a"]=> unicode(9) "changed.a" [u"b"]=> unicode(9) "changed.b" [u"c"]=> unicode(9) "changed.c" [u"d":protected]=> unicode(9) "changed.d" [u"e":u"C":private]=> unicode(9) "changed.e" } --> Using instance of D: in D::doForEachOnThis unicode(10) "Original f" unicode(10) "Original g" unicode(10) "Original a" unicode(10) "Original b" unicode(10) "Original c" unicode(10) "Original d" object(D)#%d (7) { [u"f":u"D":private]=> unicode(9) "changed.f" [u"g":protected]=> unicode(9) "changed.g" [u"a"]=> unicode(9) "changed.a" [u"b"]=> unicode(9) "changed.b" [u"c"]=> unicode(9) "changed.c" [u"d":protected]=> unicode(9) "changed.d" [u"e":u"C":private]=> unicode(10) "Original e" } --> Using instance of E: in E::doForEachOnThis unicode(12) "Overridden a" unicode(12) "Overridden b" unicode(12) "Overridden c" unicode(12) "Overridden d" unicode(12) "Overridden e" unicode(10) "Original g" object(E)#%d (8) { [u"a"]=> unicode(9) "changed.a" [u"b"]=> unicode(9) "changed.b" [u"c"]=> unicode(9) "changed.c" [u"d":protected]=> unicode(9) "changed.d" [u"e":u"E":private]=> unicode(9) "changed.e" [u"f":u"D":private]=> unicode(10) "Original f" [u"g":protected]=> unicode(9) "changed.g" [u"e":u"C":private]=> unicode(10) "Original e" } Iterate over various generations from within an inherited method: --> Using instance of C: in C::doForEachC unicode(10) "Original a" unicode(10) "Original b" unicode(10) "Original c" unicode(10) "Original d" unicode(10) "Original e" object(C)#%d (5) { [u"a"]=> unicode(9) "changed.a" [u"b"]=> unicode(9) "changed.b" [u"c"]=> unicode(9) "changed.c" [u"d":protected]=> unicode(9) "changed.d" [u"e":u"C":private]=> unicode(9) "changed.e" } --> Using instance of D: in C::doForEachC unicode(10) "Original g" unicode(10) "Original a" unicode(10) "Original b" unicode(10) "Original c" unicode(10) "Original d" unicode(10) "Original e" object(D)#%d (7) { [u"f":u"D":private]=> unicode(10) "Original f" [u"g":protected]=> unicode(9) "changed.g" [u"a"]=> unicode(9) "changed.a" [u"b"]=> unicode(9) "changed.b" [u"c"]=> unicode(9) "changed.c" [u"d":protected]=> unicode(9) "changed.d" [u"e":u"C":private]=> unicode(9) "changed.e" } --> Using instance of E: in C::doForEachC unicode(12) "Overridden a" unicode(12) "Overridden b" unicode(12) "Overridden c" unicode(12) "Overridden d" unicode(10) "Original g" unicode(10) "Original e" object(E)#%d (8) { [u"a"]=> unicode(9) "changed.a" [u"b"]=> unicode(9) "changed.b" [u"c"]=> unicode(9) "changed.c" [u"d":protected]=> unicode(9) "changed.d" [u"e":u"E":private]=> unicode(12) "Overridden e" [u"f":u"D":private]=> unicode(10) "Original f" [u"g":protected]=> unicode(9) "changed.g" [u"e":u"C":private]=> unicode(9) "changed.e" } Iterate over various generations from within an overridden static method: --> Using instance of C: in C::doForEach unicode(10) "Original a" unicode(10) "Original b" unicode(10) "Original c" unicode(10) "Original d" unicode(10) "Original e" object(C)#%d (5) { [u"a"]=> unicode(9) "changed.a" [u"b"]=> unicode(9) "changed.b" [u"c"]=> unicode(9) "changed.c" [u"d":protected]=> unicode(9) "changed.d" [u"e":u"C":private]=> unicode(9) "changed.e" } in D::doForEach unicode(10) "Original a" unicode(10) "Original b" unicode(10) "Original c" unicode(10) "Original d" object(C)#%d (5) { [u"a"]=> unicode(9) "changed.a" [u"b"]=> unicode(9) "changed.b" [u"c"]=> unicode(9) "changed.c" [u"d":protected]=> unicode(9) "changed.d" [u"e":u"C":private]=> unicode(10) "Original e" } in E::doForEach unicode(10) "Original a" unicode(10) "Original b" unicode(10) "Original c" unicode(10) "Original d" object(C)#%d (5) { [u"a"]=> unicode(9) "changed.a" [u"b"]=> unicode(9) "changed.b" [u"c"]=> unicode(9) "changed.c" [u"d":protected]=> unicode(9) "changed.d" [u"e":u"C":private]=> unicode(10) "Original e" } --> Using instance of D: in C::doForEach unicode(10) "Original g" unicode(10) "Original a" unicode(10) "Original b" unicode(10) "Original c" unicode(10) "Original d" unicode(10) "Original e" object(D)#%d (7) { [u"f":u"D":private]=> unicode(10) "Original f" [u"g":protected]=> unicode(9) "changed.g" [u"a"]=> unicode(9) "changed.a" [u"b"]=> unicode(9) "changed.b" [u"c"]=> unicode(9) "changed.c" [u"d":protected]=> unicode(9) "changed.d" [u"e":u"C":private]=> unicode(9) "changed.e" } in D::doForEach unicode(10) "Original f" unicode(10) "Original g" unicode(10) "Original a" unicode(10) "Original b" unicode(10) "Original c" unicode(10) "Original d" object(D)#%d (7) { [u"f":u"D":private]=> unicode(9) "changed.f" [u"g":protected]=> unicode(9) "changed.g" [u"a"]=> unicode(9) "changed.a" [u"b"]=> unicode(9) "changed.b" [u"c"]=> unicode(9) "changed.c" [u"d":protected]=> unicode(9) "changed.d" [u"e":u"C":private]=> unicode(10) "Original e" } in E::doForEach unicode(10) "Original g" unicode(10) "Original a" unicode(10) "Original b" unicode(10) "Original c" unicode(10) "Original d" object(D)#%d (7) { [u"f":u"D":private]=> unicode(10) "Original f" [u"g":protected]=> unicode(9) "changed.g" [u"a"]=> unicode(9) "changed.a" [u"b"]=> unicode(9) "changed.b" [u"c"]=> unicode(9) "changed.c" [u"d":protected]=> unicode(9) "changed.d" [u"e":u"C":private]=> unicode(10) "Original e" } --> Using instance of E: in C::doForEach unicode(12) "Overridden a" unicode(12) "Overridden b" unicode(12) "Overridden c" unicode(12) "Overridden d" unicode(10) "Original g" unicode(10) "Original e" object(E)#%d (8) { [u"a"]=> unicode(9) "changed.a" [u"b"]=> unicode(9) "changed.b" [u"c"]=> unicode(9) "changed.c" [u"d":protected]=> unicode(9) "changed.d" [u"e":u"E":private]=> unicode(12) "Overridden e" [u"f":u"D":private]=> unicode(10) "Original f" [u"g":protected]=> unicode(9) "changed.g" [u"e":u"C":private]=> unicode(9) "changed.e" } in D::doForEach unicode(12) "Overridden a" unicode(12) "Overridden b" unicode(12) "Overridden c" unicode(12) "Overridden d" unicode(10) "Original f" unicode(10) "Original g" object(E)#%d (8) { [u"a"]=> unicode(9) "changed.a" [u"b"]=> unicode(9) "changed.b" [u"c"]=> unicode(9) "changed.c" [u"d":protected]=> unicode(9) "changed.d" [u"e":u"E":private]=> unicode(12) "Overridden e" [u"f":u"D":private]=> unicode(9) "changed.f" [u"g":protected]=> unicode(9) "changed.g" [u"e":u"C":private]=> unicode(10) "Original e" } in E::doForEach unicode(12) "Overridden a" unicode(12) "Overridden b" unicode(12) "Overridden c" unicode(12) "Overridden d" unicode(12) "Overridden e" unicode(10) "Original g" object(E)#%d (8) { [u"a"]=> unicode(9) "changed.a" [u"b"]=> unicode(9) "changed.b" [u"c"]=> unicode(9) "changed.c" [u"d":protected]=> unicode(9) "changed.d" [u"e":u"E":private]=> unicode(9) "changed.e" [u"f":u"D":private]=> unicode(10) "Original f" [u"g":protected]=> unicode(9) "changed.g" [u"e":u"C":private]=> unicode(10) "Original e" } Iterate over various generations from outside the object: --> Using instance of C: unicode(10) "Original a" unicode(10) "Original b" unicode(10) "Original c" object(C)#%d (5) { [u"a"]=> unicode(9) "changed.a" [u"b"]=> unicode(9) "changed.b" [u"c"]=> &unicode(9) "changed.c" [u"d":protected]=> unicode(10) "Original d" [u"e":u"C":private]=> unicode(10) "Original e" } --> Using instance of D: unicode(10) "Original a" unicode(10) "Original b" unicode(10) "Original c" object(D)#%d (7) { [u"f":u"D":private]=> unicode(10) "Original f" [u"g":protected]=> unicode(10) "Original g" [u"a"]=> unicode(9) "changed.a" [u"b"]=> unicode(9) "changed.b" [u"c"]=> &unicode(9) "changed.c" [u"d":protected]=> unicode(10) "Original d" [u"e":u"C":private]=> unicode(10) "Original e" } --> Using instance of E: unicode(12) "Overridden a" unicode(12) "Overridden b" unicode(12) "Overridden c" object(E)#%d (8) { [u"a"]=> unicode(9) "changed.a" [u"b"]=> unicode(9) "changed.b" [u"c"]=> &unicode(9) "changed.c" [u"d":protected]=> unicode(12) "Overridden d" [u"e":u"E":private]=> unicode(12) "Overridden e" [u"f":u"D":private]=> unicode(10) "Original f" [u"g":protected]=> unicode(10) "Original g" [u"e":u"C":private]=> unicode(10) "Original e" } ===DONE=== http://cvs.php.net/viewvc.cgi/php-src/tests/lang/foreachLoopObjects.005.phpt?view=markup&rev=1.1 Index: php-src/tests/lang/foreachLoopObjects.005.phpt +++ php-src/tests/lang/foreachLoopObjects.005.phpt --TEST-- Foreach loop tests - removing properties before and after the current property during the loop. --FILE-- <?php class C { public $a = "Original a"; public $b = "Original b"; public $c = "Original c"; public $d = "Original d"; public $e = "Original e"; } echo "\nRemoving properties before the current element from an iterated object.\n"; $obj = new C; $count=0; foreach ($obj as $v) { if ($v==$obj->a) { unset($obj->c); } var_dump($v); if (++$count>10) { echo "Loop detected.\n"; break; } } var_dump($obj); echo "\nRemoving properties before the current element from an iterated object.\n"; $obj = new C; foreach ($obj as $v) { if ($v==$obj->b) { unset($obj->a); } var_dump($v); if (++$count>10) { echo "Loop detected.\n"; break; } } var_dump($obj); ?> ===DONE=== --EXPECTF-- Removing properties before the current element from an iterated object. unicode(10) "Original a" unicode(10) "Original b" unicode(10) "Original d" unicode(10) "Original e" object(C)#%d (4) { [u"a"]=> unicode(10) "Original a" [u"b"]=> unicode(10) "Original b" [u"d"]=> unicode(10) "Original d" [u"e"]=> unicode(10) "Original e" } Removing properties before the current element from an iterated object. unicode(10) "Original a" unicode(10) "Original b" unicode(10) "Original c" unicode(10) "Original d" unicode(10) "Original e" object(C)#%d (4) { [u"b"]=> unicode(10) "Original b" [u"c"]=> unicode(10) "Original c" [u"d"]=> unicode(10) "Original d" [u"e"]=> unicode(10) "Original e" } ===DONE=== http://cvs.php.net/viewvc.cgi/php-src/tests/lang/foreachLoopObjects.004.phpt?view=markup&rev=1.1 Index: php-src/tests/lang/foreachLoopObjects.004.phpt +++ php-src/tests/lang/foreachLoopObjects.004.phpt --TEST-- Foreach loop tests - Removing the current element from an iterated object. --FILE-- <?php class C { public $a = "Original a"; public $b = "Original b"; public $c = "Original c"; public $d = "Original d"; public $e = "Original e"; } echo "\nRemoving the current element from an iterated object.\n"; $obj = new C; $count=0; foreach ($obj as $v) { if ($v==$obj->b) { unset($obj->b); } var_dump($v); if (++$count>10) { echo "Loop detected.\n"; break; } } var_dump($obj); ?> ===DONE=== --EXPECTF-- Removing the current element from an iterated object. unicode(10) "Original a" unicode(10) "Original b" Notice: Undefined property: C::$b in %s on line %d unicode(10) "Original c" Notice: Undefined property: C::$b in %s on line %d unicode(10) "Original d" Notice: Undefined property: C::$b in %s on line %d unicode(10) "Original e" object(C)#%d (4) { [u"a"]=> unicode(10) "Original a" [u"c"]=> unicode(10) "Original c" [u"d"]=> unicode(10) "Original d" [u"e"]=> unicode(10) "Original e" } ===DONE===
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php