|
|
|
@ -0,0 +1,58 @@ |
|
|
|
--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 |