Browse Source
Merge branch 'coalesce_operator'
Merge branch 'coalesce_operator'
* coalesce_operator: Extended coalesce operator test case for ordering/short-circuiting Ensure not evaluated twice Added test Initial coalesce operator implementationpull/850/head
12 changed files with 3352 additions and 3026 deletions
-
1Zend/zend_ast.h
-
27Zend/zend_compile.c
-
4Zend/zend_language_parser.y
-
6058Zend/zend_language_scanner.c
-
4Zend/zend_language_scanner.l
-
2Zend/zend_language_scanner_defs.h
-
1Zend/zend_opcode.c
-
35Zend/zend_vm_def.h
-
163Zend/zend_vm_execute.h
-
3Zend/zend_vm_opcodes.c
-
1Zend/zend_vm_opcodes.h
-
79tests/lang/operators/coalesce.phpt
6058
Zend/zend_language_scanner.c
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,79 @@ |
|||
--TEST-- |
|||
Test ?? operator |
|||
--FILE-- |
|||
<?php |
|||
|
|||
$var = 7; |
|||
$var2 = NULL; |
|||
|
|||
$obj = new StdClass; |
|||
$obj->boo = 7; |
|||
|
|||
$arr = [ |
|||
2 => 7, |
|||
"foo" => "bar", |
|||
"foobar" => NULL, |
|||
"qux" => $obj, |
|||
"bing" => [ |
|||
"bang" |
|||
] |
|||
]; |
|||
|
|||
function foobar() { |
|||
echo "called\n"; |
|||
return ['a']; |
|||
} |
|||
|
|||
var_dump($nonexistant_variable ?? 3); |
|||
echo PHP_EOL; |
|||
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); |
|||
echo PHP_EOL; |
|||
function f($x) |
|||
{ |
|||
printf("%s(%d)\n", __FUNCTION__, $x); |
|||
return $x; |
|||
} |
|||
|
|||
$a = f(null) ?? f(1) ?? f(2); |
|||
?> |
|||
--EXPECTF-- |
|||
int(3) |
|||
|
|||
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" |
|||
|
|||
f(0) |
|||
f(1) |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue