diff options
author | Dmitry Stogov <dmitry@php.net> | 2011-04-08 10:02:07 +0000 |
---|---|---|
committer | Dmitry Stogov <dmitry@php.net> | 2011-04-08 10:02:07 +0000 |
commit | efcb9a71cdb3efde06dd3b347e64b21e4418c9db (patch) | |
tree | 0b8c92f949a04c5da68fe3811ad86c5b8aca1029 /Zend/tests/bug54039.phpt | |
parent | 77ed819430ed74c5b0bb5e13294c74d39f17b774 (diff) | |
download | php-git-efcb9a71cdb3efde06dd3b347e64b21e4418c9db.tar.gz |
- Fixed bug #54358 (Closure, use and reference)
- Fixed bug #54039 (use() of static variables in lambda functions can break staticness)
Diffstat (limited to 'Zend/tests/bug54039.phpt')
-rw-r--r-- | Zend/tests/bug54039.phpt | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/Zend/tests/bug54039.phpt b/Zend/tests/bug54039.phpt new file mode 100644 index 0000000000..ccdfe94305 --- /dev/null +++ b/Zend/tests/bug54039.phpt @@ -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 |