wharmby         Mon Jun 15 17:34:40 2009 UTC

  Added files:                 (Branch: PHP_5_3)
    /php-src/tests/lang foreachLoopObjects.004.phpt 
                        foreachLoopObjects.006.phpt 
                        foreachLoopObjects.002.phpt 
                        foreachLoopObjects.003.phpt 
                        foreachLoopObjects.001.phpt 
                        foreachLoopObjects.005.phpt 

  Removed files:               
    /php-src/tests/func foreachLoopObjects.002.phpt 
                        foreachLoopObjects.001.phpt 
                        foreachLoopObjects.003.phpt 
                        foreachLoopObjects.005.phpt 
                        foreachLoopObjects.004.phpt 
                        foreachLoopObjects.006.phpt 
  Log:
  Move tests to correct directory
  
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===
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.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.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.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.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===
-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to