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