- 添加箭头函数基本功能测试用例验证闭包行为 - 修复二元运算符解析时变量存在性检查逻辑 - 解决全局变量在箭头函数中的访问问题 - 修复数组解包空数组导致断言失败的bug - 改进变量名转义和局部变量检测机制pull/1/head
parent
b8516b6ac0
commit
e7db0c7348
4 changed files with 78 additions and 5 deletions
@ -0,0 +1,11 @@ |
||||
--TEST-- |
||||
GH-19303 (Unpacking empty packed array into uninitialized array causes assertion failure) |
||||
--FILE-- |
||||
<?php |
||||
$a = [0]; |
||||
unset($a[0]); |
||||
var_dump([...$a]); |
||||
?> |
||||
--EXPECT-- |
||||
array(0) { |
||||
} |
||||
@ -0,0 +1,45 @@ |
||||
--TEST-- |
||||
Basic arrow function functionality check |
||||
--FILE-- |
||||
<?php |
||||
|
||||
$foo = fn() => 1; |
||||
var_dump($foo()); |
||||
|
||||
$foo = fn($x) => $x; |
||||
var_dump($foo(2)); |
||||
|
||||
$foo = fn($x, $y) => $x + $y; |
||||
var_dump($foo(1, 2)); |
||||
|
||||
// Closing over $var |
||||
$var = 4; |
||||
$foo = fn() => $var; |
||||
var_dump($foo()); |
||||
|
||||
// Not closing over $var, it's a parameter |
||||
$foo = fn($var) => $var; |
||||
var_dump($foo(5)); |
||||
|
||||
// Close over $var by-value, not by-reference |
||||
$var = 5; |
||||
$foo = fn() => ++$var; |
||||
var_dump($foo()); |
||||
var_dump($var); |
||||
|
||||
// Nested arrow functions closing over variable |
||||
$var = 6; |
||||
var_dump((fn() => fn() => $var)()()); |
||||
var_dump((fn() => function() use($var) { return $var; })()()); |
||||
|
||||
?> |
||||
--EXPECT-- |
||||
int(1) |
||||
int(2) |
||||
int(3) |
||||
int(4) |
||||
int(5) |
||||
int(6) |
||||
int(5) |
||||
int(6) |
||||
int(6) |
||||
@ -0,0 +1,13 @@ |
||||
--TEST-- |
||||
Auto-globals in arrow functions |
||||
--FILE-- |
||||
<?php |
||||
function main() { |
||||
global $a; |
||||
$a = 123; |
||||
$fn = fn() => $GLOBALS['a']; |
||||
var_dump($fn()); |
||||
} |
||||
?> |
||||
--EXPECT-- |
||||
int(123) |
||||
Loading…
Reference in new issue