Browse Source

New foreach tests. Tested on Windows, Linux and Linux 64 bit.

PHP-5.2.1RC1
andy wharmby 17 years ago
parent
commit
5cd01fa48b
  1. 69
      tests/lang/foreachLoopObjects.001.phpt
  2. 585
      tests/lang/foreachLoopObjects.002.phpt
  3. 249
      tests/lang/foreachLoopObjects.003.phpt
  4. 54
      tests/lang/foreachLoopObjects.004.phpt
  5. 78
      tests/lang/foreachLoopObjects.005.phpt
  6. 147
      tests/lang/foreachLoopObjects.006.phpt

69
tests/lang/foreachLoopObjects.001.phpt

@ -0,0 +1,69 @@
--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.
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
string(1) "a"
string(10) "Original a"
string(1) "b"
string(10) "Original b"
string(1) "c"
string(10) "Original c"
Check key and value after the loop.
string(1) "c"
string(10) "Original c"
Object instantiated inside loop.
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
string(1) "a"
string(10) "Original a"
string(1) "b"
string(10) "Original b"
string(1) "c"
string(10) "Original c"
Check key and value after the loop.
string(1) "c"
string(10) "Original c"

585
tests/lang/foreachLoopObjects.002.phpt

@ -0,0 +1,585 @@
--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);
?>
--EXPECTF--
Iterate over various generations from within overridden methods:
--> Using instance of C:
in C::doForEachOnThis
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
string(10) "Original d"
string(10) "Original e"
object(C)#%d (5) {
["a"]=>
string(9) "changed.a"
["b"]=>
string(9) "changed.b"
["c"]=>
string(9) "changed.c"
["d:protected"]=>
string(9) "changed.d"
["e:private"]=>
string(9) "changed.e"
}
--> Using instance of D:
in D::doForEachOnThis
string(10) "Original f"
string(10) "Original g"
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
string(10) "Original d"
object(D)#%d (7) {
["f:private"]=>
string(9) "changed.f"
["g:protected"]=>
string(9) "changed.g"
["a"]=>
string(9) "changed.a"
["b"]=>
string(9) "changed.b"
["c"]=>
string(9) "changed.c"
["d:protected"]=>
string(9) "changed.d"
["e:private"]=>
string(10) "Original e"
}
--> Using instance of E:
in E::doForEachOnThis
string(12) "Overridden a"
string(12) "Overridden b"
string(12) "Overridden c"
string(12) "Overridden d"
string(12) "Overridden e"
string(10) "Original g"
object(E)#%d (8) {
["a"]=>
string(9) "changed.a"
["b"]=>
string(9) "changed.b"
["c"]=>
string(9) "changed.c"
["d:protected"]=>
string(9) "changed.d"
["e:private"]=>
string(9) "changed.e"
["f:private"]=>
string(10) "Original f"
["g:protected"]=>
string(9) "changed.g"
["e:private"]=>
string(10) "Original e"
}
Iterate over various generations from within an inherited method:
--> Using instance of C:
in C::doForEachC
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
string(10) "Original d"
string(10) "Original e"
object(C)#%d (5) {
["a"]=>
string(9) "changed.a"
["b"]=>
string(9) "changed.b"
["c"]=>
string(9) "changed.c"
["d:protected"]=>
string(9) "changed.d"
["e:private"]=>
string(9) "changed.e"
}
--> Using instance of D:
in C::doForEachC
string(10) "Original g"
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
string(10) "Original d"
string(10) "Original e"
object(D)#%d (7) {
["f:private"]=>
string(10) "Original f"
["g:protected"]=>
string(9) "changed.g"
["a"]=>
string(9) "changed.a"
["b"]=>
string(9) "changed.b"
["c"]=>
string(9) "changed.c"
["d:protected"]=>
string(9) "changed.d"
["e:private"]=>
string(9) "changed.e"
}
--> Using instance of E:
in C::doForEachC
string(12) "Overridden a"
string(12) "Overridden b"
string(12) "Overridden c"
string(12) "Overridden d"
string(10) "Original g"
string(10) "Original e"
object(E)#%d (8) {
["a"]=>
string(9) "changed.a"
["b"]=>
string(9) "changed.b"
["c"]=>
string(9) "changed.c"
["d:protected"]=>
string(9) "changed.d"
["e:private"]=>
string(12) "Overridden e"
["f:private"]=>
string(10) "Original f"
["g:protected"]=>
string(9) "changed.g"
["e:private"]=>
string(9) "changed.e"
}
Iterate over various generations from within an overridden static method:
--> Using instance of C:
in C::doForEach
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
string(10) "Original d"
string(10) "Original e"
object(C)#%d (5) {
["a"]=>
string(9) "changed.a"
["b"]=>
string(9) "changed.b"
["c"]=>
string(9) "changed.c"
["d:protected"]=>
string(9) "changed.d"
["e:private"]=>
string(9) "changed.e"
}
in D::doForEach
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
string(10) "Original d"
object(C)#%d (5) {
["a"]=>
string(9) "changed.a"
["b"]=>
string(9) "changed.b"
["c"]=>
string(9) "changed.c"
["d:protected"]=>
string(9) "changed.d"
["e:private"]=>
string(10) "Original e"
}
in E::doForEach
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
string(10) "Original d"
object(C)#%d (5) {
["a"]=>
string(9) "changed.a"
["b"]=>
string(9) "changed.b"
["c"]=>
string(9) "changed.c"
["d:protected"]=>
string(9) "changed.d"
["e:private"]=>
string(10) "Original e"
}
--> Using instance of D:
in C::doForEach
string(10) "Original g"
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
string(10) "Original d"
string(10) "Original e"
object(D)#%d (7) {
["f:private"]=>
string(10) "Original f"
["g:protected"]=>
string(9) "changed.g"
["a"]=>
string(9) "changed.a"
["b"]=>
string(9) "changed.b"
["c"]=>
string(9) "changed.c"
["d:protected"]=>
string(9) "changed.d"
["e:private"]=>
string(9) "changed.e"
}
in D::doForEach
string(10) "Original f"
string(10) "Original g"
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
string(10) "Original d"
object(D)#%d (7) {
["f:private"]=>
string(9) "changed.f"
["g:protected"]=>
string(9) "changed.g"
["a"]=>
string(9) "changed.a"
["b"]=>
string(9) "changed.b"
["c"]=>
string(9) "changed.c"
["d:protected"]=>
string(9) "changed.d"
["e:private"]=>
string(10) "Original e"
}
in E::doForEach
string(10) "Original g"
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
string(10) "Original d"
object(D)#%d (7) {
["f:private"]=>
string(10) "Original f"
["g:protected"]=>
string(9) "changed.g"
["a"]=>
string(9) "changed.a"
["b"]=>
string(9) "changed.b"
["c"]=>
string(9) "changed.c"
["d:protected"]=>
string(9) "changed.d"
["e:private"]=>
string(10) "Original e"
}
--> Using instance of E:
in C::doForEach
string(12) "Overridden a"
string(12) "Overridden b"
string(12) "Overridden c"
string(12) "Overridden d"
string(10) "Original g"
string(10) "Original e"
object(E)#%d (8) {
["a"]=>
string(9) "changed.a"
["b"]=>
string(9) "changed.b"
["c"]=>
string(9) "changed.c"
["d:protected"]=>
string(9) "changed.d"
["e:private"]=>
string(12) "Overridden e"
["f:private"]=>
string(10) "Original f"
["g:protected"]=>
string(9) "changed.g"
["e:private"]=>
string(9) "changed.e"
}
in D::doForEach
string(12) "Overridden a"
string(12) "Overridden b"
string(12) "Overridden c"
string(12) "Overridden d"
string(10) "Original f"
string(10) "Original g"
object(E)#%d (8) {
["a"]=>
string(9) "changed.a"
["b"]=>
string(9) "changed.b"
["c"]=>
string(9) "changed.c"
["d:protected"]=>
string(9) "changed.d"
["e:private"]=>
string(12) "Overridden e"
["f:private"]=>
string(9) "changed.f"
["g:protected"]=>
string(9) "changed.g"
["e:private"]=>
string(10) "Original e"
}
in E::doForEach
string(12) "Overridden a"
string(12) "Overridden b"
string(12) "Overridden c"
string(12) "Overridden d"
string(12) "Overridden e"
string(10) "Original g"
object(E)#%d (8) {
["a"]=>
string(9) "changed.a"
["b"]=>
string(9) "changed.b"
["c"]=>
string(9) "changed.c"
["d:protected"]=>
string(9) "changed.d"
["e:private"]=>
string(9) "changed.e"
["f:private"]=>
string(10) "Original f"
["g:protected"]=>
string(9) "changed.g"
["e:private"]=>
string(10) "Original e"
}
Iterate over various generations from outside the object:
--> Using instance of C:
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
object(C)#%d (5) {
["a"]=>
string(9) "changed.a"
["b"]=>
string(9) "changed.b"
["c"]=>
&string(9) "changed.c"
["d:protected"]=>
string(10) "Original d"
["e:private"]=>
string(10) "Original e"
}
--> Using instance of D:
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
object(D)#%d (7) {
["f:private"]=>
string(10) "Original f"
["g:protected"]=>
string(10) "Original g"
["a"]=>
string(9) "changed.a"
["b"]=>
string(9) "changed.b"
["c"]=>
&string(9) "changed.c"
["d:protected"]=>
string(10) "Original d"
["e:private"]=>
string(10) "Original e"
}
--> Using instance of E:
string(12) "Overridden a"
string(12) "Overridden b"
string(12) "Overridden c"
object(E)#%d (8) {
["a"]=>
string(9) "changed.a"
["b"]=>
string(9) "changed.b"
["c"]=>
&string(9) "changed.c"
["d:protected"]=>
string(12) "Overridden d"
["e:private"]=>
string(12) "Overridden e"
["f:private"]=>
string(10) "Original f"
["g:protected"]=>
string(10) "Original g"
["e:private"]=>
string(10) "Original e"
}

249
tests/lang/foreachLoopObjects.003.phpt

@ -0,0 +1,249 @@
--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);
?>
--EXPECTF--
Directly changing object values.
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
object(C)#%d (5) {
["a"]=>
string(9) "changed.a"
["b"]=>
string(9) "changed.b"
["c"]=>
string(9) "changed.c"
["d:protected"]=>
string(10) "Original d"
["e:private"]=>
string(10) "Original e"
}
Modifying the foreach $value.
object(C)#%d (5) {
["a"]=>
string(10) "Original a"
["b"]=>
string(10) "Original b"
["c"]=>
string(10) "Original c"
["d:protected"]=>
string(10) "Original d"
["e:private"]=>
string(10) "Original e"
}
Modifying the foreach &$value.
object(C)#%d (5) {
["a"]=>
string(9) "changed.a"
["b"]=>
string(9) "changed.b"
["c"]=>
&string(9) "changed.c"
["d:protected"]=>
string(10) "Original d"
["e:private"]=>
string(10) "Original e"
}
Adding properties to an an object.
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
string(16) "Added property 0"
string(16) "Added property 1"
string(16) "Added property 2"
string(16) "Added property 3"
string(16) "Added property 4"
string(16) "Added property 5"
string(16) "Added property 6"
string(16) "Added property 7"
Loop detected
object(C)#%d (17) {
["a"]=>
string(10) "Original a"
["b"]=>
string(10) "Original b"
["c"]=>
string(10) "Original c"
["d:protected"]=>
string(10) "Original d"
["e:private"]=>
string(10) "Original e"
["new0"]=>
string(16) "Added property 0"
["new1"]=>
string(16) "Added property 1"
["new2"]=>
string(16) "Added property 2"
["new3"]=>
string(16) "Added property 3"
["new4"]=>
string(16) "Added property 4"
["new5"]=>
string(16) "Added property 5"
["new6"]=>
string(16) "Added property 6"
["new7"]=>
string(16) "Added property 7"
["new8"]=>
string(16) "Added property 8"
["new9"]=>
string(16) "Added property 9"
["new10"]=>
string(17) "Added property 10"
["new11"]=>
string(17) "Added property 11"
}
Adding properties to an an object, using &$value.
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
string(16) "Added property 0"
string(16) "Added property 1"
string(16) "Added property 2"
string(16) "Added property 3"
string(16) "Added property 4"
string(16) "Added property 5"
string(16) "Added property 6"
string(16) "Added property 7"
Loop detected
object(C)#%d (17) {
["a"]=>
string(10) "Original a"
["b"]=>
string(10) "Original b"
["c"]=>
string(10) "Original c"
["d:protected"]=>
string(10) "Original d"
["e:private"]=>
string(10) "Original e"
["new0"]=>
string(16) "Added property 0"
["new1"]=>
string(16) "Added property 1"
["new2"]=>
string(16) "Added property 2"
["new3"]=>
string(16) "Added property 3"
["new4"]=>
string(16) "Added property 4"
["new5"]=>
string(16) "Added property 5"
["new6"]=>
string(16) "Added property 6"
["new7"]=>
string(16) "Added property 7"
["new8"]=>
&string(16) "Added property 8"
["new9"]=>
string(16) "Added property 9"
["new10"]=>
string(17) "Added property 10"
["new11"]=>
string(17) "Added property 11"
}
Removing properties from an object.
string(10) "Original a"
object(C)#%d (2) {
["d:protected"]=>
string(10) "Original d"
["e:private"]=>
string(10) "Original e"
}
Removing properties from an object, using &$value.
string(10) "Original a"
object(C)#%d (2) {
["d:protected"]=>
string(10) "Original d"
["e:private"]=>
string(10) "Original e"
}

54
tests/lang/foreachLoopObjects.004.phpt

@ -0,0 +1,54 @@
--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);
?>
--EXPECTF--
Removing the current element from an iterated object.
string(10) "Original a"
string(10) "Original b"
Notice: Undefined property: C::$b in %s on line 15
string(10) "Original c"
Notice: Undefined property: C::$b in %s on line 15
string(10) "Original d"
Notice: Undefined property: C::$b in %s on line 15
string(10) "Original e"
object(C)#%d (4) {
["a"]=>
string(10) "Original a"
["c"]=>
string(10) "Original c"
["d"]=>
string(10) "Original d"
["e"]=>
string(10) "Original e"
}

78
tests/lang/foreachLoopObjects.005.phpt

@ -0,0 +1,78 @@
--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);
?>
--EXPECTF--
Removing properties before the current element from an iterated object.
string(10) "Original a"
string(10) "Original b"
string(10) "Original d"
string(10) "Original e"
object(C)#%d (4) {
["a"]=>
string(10) "Original a"
["b"]=>
string(10) "Original b"
["d"]=>
string(10) "Original d"
["e"]=>
string(10) "Original e"
}
Removing properties before the current element from an iterated object.
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
string(10) "Original d"
string(10) "Original e"
object(C)#%d (4) {
["b"]=>
string(10) "Original b"
["c"]=>
string(10) "Original c"
["d"]=>
string(10) "Original d"
["e"]=>
string(10) "Original e"
}

147
tests/lang/foreachLoopObjects.006.phpt

@ -0,0 +1,147 @@
--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);
?>
--EXPECTF--
Substituting the iterated object for a different object.
string(10) "Original a"
string(10) "Original b"
string(5) "new a"
string(5) "new b"
string(5) "new c"
string(5) "new d"
string(5) "new e"
string(5) "new f"
object(stdClass)#%d (6) {
["a"]=>
string(5) "new a"
["b"]=>
string(5) "new b"
["c"]=>
string(5) "new c"
["d"]=>
string(5) "new d"
["e"]=>
string(5) "new e"
["f"]=>
string(5) "new f"
}
Substituting the iterated object for an array.
string(10) "Original a"
string(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)
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
string(10) "Original d"
string(10) "Original e"
object(C)#%d (5) {
["a"]=>
string(10) "Original a"
["b"]=>
string(10) "Original b"
["c"]=>
string(10) "Original c"
["d"]=>
string(10) "Original d"
["e"]=>
string(10) "Original e"
}
Loading…
Cancel
Save