1--TEST-- 2Bug #54039 (use() of static variables in lambda functions can break staticness) 3--FILE-- 4<?php 5function test_1() { 6 static $v = 0; 7 ++$v; 8 echo "Outer function increments \$v to $v\n"; 9 $f = function() use($v) { 10 echo "Inner function reckons \$v is $v\n"; 11 }; 12 return $f; 13} 14 15$f = test_1(); $f(); 16$f = test_1(); $f(); 17 18function test_2() { 19 static $v = 0; 20 $f = function() use($v) { 21 echo "Inner function reckons \$v is $v\n"; 22 }; 23 ++$v; 24 echo "Outer function increments \$v to $v\n"; 25 return $f; 26} 27 28$f = test_2(); $f(); 29$f = test_2(); $f(); 30 31function test_3() { 32 static $v = ""; 33 $v .= 'b'; 34 echo "Outer function catenates 'b' onto \$v to give $v\n"; 35 $f = function() use($v) { 36 echo "Inner function reckons \$v is $v\n"; 37 }; 38 $v .= 'a'; 39 echo "Outer function catenates 'a' onto \$v to give $v\n"; 40 return $f; 41} 42$f = test_3(); $f(); 43$f = test_3(); $f(); 44--EXPECT-- 45Outer function increments $v to 1 46Inner function reckons $v is 1 47Outer function increments $v to 2 48Inner function reckons $v is 2 49Outer function increments $v to 1 50Inner function reckons $v is 0 51Outer function increments $v to 2 52Inner function reckons $v is 1 53Outer function catenates 'b' onto $v to give b 54Outer function catenates 'a' onto $v to give ba 55Inner function reckons $v is b 56Outer function catenates 'b' onto $v to give bab 57Outer function catenates 'a' onto $v to give baba 58Inner function reckons $v is bab 59