12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- --TEST--
- Bug #54039 (use() of static variables in lambda functions can break staticness)
- --FILE--
- <?php
- function test_1() {
- static $v = 0;
- ++$v;
- echo "Outer function increments \$v to $v\n";
- $f = function() use($v) {
- echo "Inner function reckons \$v is $v\n";
- };
- return $f;
- }
- $f = test_1(); $f();
- $f = test_1(); $f();
- function test_2() {
- static $v = 0;
- $f = function() use($v) {
- echo "Inner function reckons \$v is $v\n";
- };
- ++$v;
- echo "Outer function increments \$v to $v\n";
- return $f;
- }
- $f = test_2(); $f();
- $f = test_2(); $f();
- function test_3() {
- static $v = "";
- $v .= 'b';
- echo "Outer function catenates 'b' onto \$v to give $v\n";
- $f = function() use($v) {
- echo "Inner function reckons \$v is $v\n";
- };
- $v .= 'a';
- echo "Outer function catenates 'a' onto \$v to give $v\n";
- return $f;
- }
- $f = test_3(); $f();
- $f = test_3(); $f();
- --EXPECT--
- Outer function increments $v to 1
- Inner function reckons $v is 1
- Outer function increments $v to 2
- Inner function reckons $v is 2
- Outer function increments $v to 1
- Inner function reckons $v is 0
- Outer function increments $v to 2
- Inner function reckons $v is 1
- Outer function catenates 'b' onto $v to give b
- Outer function catenates 'a' onto $v to give ba
- Inner function reckons $v is b
- Outer function catenates 'b' onto $v to give bab
- Outer function catenates 'a' onto $v to give baba
- Inner function reckons $v is bab
|