bug54039.phpt 1.4 KB

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