为什么这在 PHP (7.3) 中没问题?它有什么用例吗?
<?php
$foo = [10, 20, 30];
echo $foo[]++, "\n", ++$foo[], "\n", ++$foo[], "\n";
Run Code Online (Sandbox Code Playgroud)
输出:
php test.php
1
1
Run Code Online (Sandbox Code Playgroud)
我预计会出现如下读取错误。
<?php
$foo = [10, 20, 30];
$foo[] += 1; // No error either
$foo[] = $foo[] + 1; //PHP Fatal error: Cannot use [] for reading in
Run Code Online (Sandbox Code Playgroud)
$foo[]++首先创建一个新的null条目 in $foo,它被回显,导致一个空行(因为echo null;什么都不输出)。新条目$foo然后递增,因此null类型杂耍0为整数,从而产生 value 1。
++$foo[]创建另一个新null条目 in $foo,在这种情况下,它在输出之前递增,因此两行1。
如果您更改代码以使用var_dump而不是echo您可以更清楚地看到这一点:
$foo = [10, 20, 30];
var_dump($foo[]++);
var_dump(++$foo[]);
var_dump(++$foo[]);
var_dump($foo);
Run Code Online (Sandbox Code Playgroud)
输出:
NULL
int(1)
int(1)
array(6) {
[0]=>
int(10)
[1]=>
int(20)
[2]=>
int(30)
[3]=>
int(1)
[4]=>
int(1)
[5]=>
int(1)
}
Run Code Online (Sandbox Code Playgroud)
请注意,与递增null,其结果在1,递减 null有没有影响(var_dump(--$foo[])输出null)。手册中描述了这种行为。