Q1:我认为??在以下情况下将不会执行任何操作:
$a = [1, 2];
foreach ($a ?? [] as &$v) {
$v++;
}
var_dump($a);
Run Code Online (Sandbox Code Playgroud)
但为什么?
array(2) {
[0]=>
int(1)
[1]=>
int(2)
}
Run Code Online (Sandbox Code Playgroud)
Q2:这更奇怪:
foreach ($a = [1, 2] as &$v) {
$v++;
}
var_dump($a);
// output
array(2) {
[0]=>
int(1)
[1]=>
int(2)
}
Run Code Online (Sandbox Code Playgroud)
我的想法:我认为表达式不可引用,但foreach捕获错误或以某种方式然后复制。有效的参考资料:
$a = 1;
$c = &$a;
Run Code Online (Sandbox Code Playgroud)
不工作:
$a = 1;
$c = &($a);
$c = &($a ?? []);
$c = &($a + 1);
Run Code Online (Sandbox Code Playgroud)
??复印吗?我只是不想用 if 为 null 来包装foreach, …