- 添加 closure_003.phpt 测试本地作用域词法变量的闭包功能 - 添加 closure_004.phpt 测试作用域生命周期词法变量的闭包功能 - 修改 convertToRef 方法修复原生类型变量引用转换检查逻辑 - 更新编译器基类中的引用转换实现以正确处理变量类型检查pull/1/head
parent
b3dc15a55f
commit
51939af82f
3 changed files with 76 additions and 3 deletions
@ -0,0 +1,34 @@ |
|||||||
|
--TEST-- |
||||||
|
Closure 003: Lambda with lexical variables (local scope) |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
|
||||||
|
function run () { |
||||||
|
$x = 4; |
||||||
|
|
||||||
|
$lambda1 = function () use ($x) { |
||||||
|
echo "$x\n"; |
||||||
|
}; |
||||||
|
|
||||||
|
$lambda2 = function () use (&$x) { |
||||||
|
echo "$x\n"; |
||||||
|
}; |
||||||
|
|
||||||
|
$lambda1(); |
||||||
|
$lambda2(); |
||||||
|
$x++; |
||||||
|
$lambda1(); |
||||||
|
$lambda2(); |
||||||
|
} |
||||||
|
|
||||||
|
function main() { |
||||||
|
run(); |
||||||
|
echo "Done\n"; |
||||||
|
} |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
4 |
||||||
|
4 |
||||||
|
4 |
||||||
|
5 |
||||||
|
Done |
||||||
@ -0,0 +1,37 @@ |
|||||||
|
--TEST-- |
||||||
|
Closure 004: Lambda with lexical variables (scope lifetime) |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
|
||||||
|
function run () { |
||||||
|
$x = 4; |
||||||
|
|
||||||
|
$lambda1 = function () use ($x) { |
||||||
|
echo "$x\n"; |
||||||
|
}; |
||||||
|
|
||||||
|
$lambda2 = function () use (&$x) { |
||||||
|
echo "$x\n"; |
||||||
|
$x++; |
||||||
|
}; |
||||||
|
|
||||||
|
return array($lambda1, $lambda2); |
||||||
|
} |
||||||
|
|
||||||
|
function main() { |
||||||
|
list ($lambda1, $lambda2) = run(); |
||||||
|
|
||||||
|
$lambda1(); |
||||||
|
$lambda2(); |
||||||
|
$lambda1(); |
||||||
|
$lambda2(); |
||||||
|
|
||||||
|
echo "Done\n"; |
||||||
|
} |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
4 |
||||||
|
4 |
||||||
|
4 |
||||||
|
5 |
||||||
|
Done |
||||||
Loading…
Reference in new issue