Php 无键递增数组访问表达式
为什么在PHP(7.3)中可以这样做?它有什么使用案例吗Php 无键递增数组访问表达式,php,Php,为什么在PHP(7.3)中可以这样做?它有什么使用案例吗 这种奇怪的推送技术是我无法想象在项目中需要的,而且很可能会让未来的脚本读者感到困惑 从3v4l.org上看,这种行为似乎与php7.2及更高版本一致 第一个增量是后期增量,因此在增量之前会显示初始值$foo[],该值等于null 后两个增量是预增量,因此它们会回显增量值 递增null将创建1,该值将被回显并存储为1。 递减null将创建null,该值存储为null,并作为空字符串回显 代码:() 输出: --- array ( 0 =
这种奇怪的推送技术是我无法想象在项目中需要的,而且很可能会让未来的脚本读者感到困惑
从3v4l.org上看,这种行为似乎与php7.2及更高版本一致
第一个增量是后期增量,因此在增量之前会显示初始值$foo[]
,该值等于null
后两个增量是预增量,因此它们会回显增量值
递增null
将创建1
,该值将被回显并存储为1
。
递减null
将创建null
,该值存储为null
,并作为空字符串回显
代码:()
输出:
---
array (
0 => 10,
1 => 20,
2 => 30,
3 => 1,
)
---
1
array (
0 => 10,
1 => 20,
2 => 30,
3 => 1,
4 => 1,
5 => NULL,
)
===
NULL
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)
}
自php7.3以来发生了一些变化,array\u push()
现在将接受单个参数。()
上面的代码片段没有什么效果——它不推送新元素。计数保持为零,但不会从php7.3生成任何警告。$foo[]+
首先在$foo
中创建一个新的null
条目,该条目为echo'ed,导致一个空行(因为echo null;
不输出任何内容)。$foo
中的新条目随后递增,因此将null
类型变为0
,作为一个整数,从而产生一个值1
+$foo[]
在$foo
中创建另一个新的null
条目,在本例中,该条目在输出前递增,因此其中包含1
的两行
如果您将代码更改为使用var\u dump
而不是echo
,您可以更清楚地看到这一点:
$foo = [10, 20, 30];
var_dump($foo[]++);
var_dump(++$foo[]);
var_dump(++$foo[]);
var_dump($foo);
输出:
---
array (
0 => 10,
1 => 20,
2 => 30,
3 => 1,
)
---
1
array (
0 => 10,
1 => 20,
2 => 30,
3 => 1,
4 => 1,
5 => NULL,
)
===
NULL
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)
}
请注意,与导致1
的递增null
不同,递减null
没有效果(var\u dump(--$foo[])
输出null
)。中描述了这种行为