- 添加了对 ?? 运算符的完整编译支持 - 实现了变量存在性检查逻辑 - 添加了链式表达式解析功能 - 集成了测试用例验证功能 - 优化了错误处理机制 - 完善了代码生成流程pull/1/head
parent
cfcbfcdb2f
commit
fdf7eb9765
4 changed files with 131 additions and 6 deletions
@ -0,0 +1,66 @@ |
|||||||
|
--TEST-- |
||||||
|
Test ?? operator |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
|
||||||
|
function foobar() { |
||||||
|
echo "called\n"; |
||||||
|
return ['a']; |
||||||
|
} |
||||||
|
|
||||||
|
function main() { |
||||||
|
$var = 7; |
||||||
|
$var2 = NULL; |
||||||
|
|
||||||
|
$obj = new StdClass; |
||||||
|
$obj->boo = 7; |
||||||
|
|
||||||
|
$arr = [ |
||||||
|
2 => 7, |
||||||
|
"foo" => "bar", |
||||||
|
"foobar" => NULL, |
||||||
|
"qux" => $obj, |
||||||
|
"bing" => [ |
||||||
|
"bang" |
||||||
|
] |
||||||
|
]; |
||||||
|
|
||||||
|
var_dump($var ?? 3); |
||||||
|
var_dump($var2 ?? 3); |
||||||
|
echo PHP_EOL; |
||||||
|
var_dump($obj->boo ?? 3); |
||||||
|
var_dump($obj->bing ?? 3); |
||||||
|
var_dump($arr["qux"]->boo ?? 3); |
||||||
|
var_dump($arr["qux"]->bing ?? 3); |
||||||
|
echo PHP_EOL; |
||||||
|
var_dump($arr[2] ?? 3); |
||||||
|
var_dump($arr["foo"] ?? 3); |
||||||
|
var_dump($arr["foobar"] ?? 3); |
||||||
|
var_dump($arr["qux"] ?? 3); |
||||||
|
var_dump($arr["bing"][0] ?? 3); |
||||||
|
var_dump($arr["bing"][1] ?? 3); |
||||||
|
echo PHP_EOL; |
||||||
|
var_dump(foobar()[0] ?? false); |
||||||
|
} |
||||||
|
?> |
||||||
|
--EXPECTF-- |
||||||
|
int(7) |
||||||
|
int(3) |
||||||
|
|
||||||
|
int(7) |
||||||
|
int(3) |
||||||
|
int(7) |
||||||
|
int(3) |
||||||
|
|
||||||
|
int(7) |
||||||
|
string(3) "bar" |
||||||
|
int(3) |
||||||
|
object(stdClass)#%d (%d) { |
||||||
|
["boo"]=> |
||||||
|
int(7) |
||||||
|
} |
||||||
|
string(4) "bang" |
||||||
|
int(3) |
||||||
|
|
||||||
|
called |
||||||
|
string(1) "a" |
||||||
@ -0,0 +1,23 @@ |
|||||||
|
--TEST-- |
||||||
|
Test ?? operator |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
|
||||||
|
function f($x) |
||||||
|
{ |
||||||
|
printf("%s(%d)\n", __FUNCTION__, $x); |
||||||
|
return $x; |
||||||
|
} |
||||||
|
|
||||||
|
function main() { |
||||||
|
$r1 = f(1); |
||||||
|
$r2 = f(2); |
||||||
|
$a = f(null) ?? $r1 ?? $r2; |
||||||
|
var_dump($a); |
||||||
|
} |
||||||
|
?> |
||||||
|
--EXPECTF-- |
||||||
|
f(1) |
||||||
|
f(2) |
||||||
|
f(0) |
||||||
|
int(1) |
||||||
Loading…
Reference in new issue