summaryrefslogtreecommitdiff
path: root/Zend/tests/bug54039.phpt
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2011-04-08 10:02:07 +0000
committerDmitry Stogov <dmitry@php.net>2011-04-08 10:02:07 +0000
commitefcb9a71cdb3efde06dd3b347e64b21e4418c9db (patch)
tree0b8c92f949a04c5da68fe3811ad86c5b8aca1029 /Zend/tests/bug54039.phpt
parent77ed819430ed74c5b0bb5e13294c74d39f17b774 (diff)
downloadphp-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.phpt58
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