Php 无键递增数组访问表达式

Php 无键递增数组访问表达式,php,Php,为什么在PHP(7.3)中可以这样做?它有什么使用案例吗 这种奇怪的推送技术是我无法想象在项目中需要的,而且很可能会让未来的脚本读者感到困惑 从3v4l.org上看,这种行为似乎与php7.2及更高版本一致 第一个增量是后期增量,因此在增量之前会显示初始值$foo[],该值等于null 后两个增量是预增量,因此它们会回显增量值 递增null将创建1,该值将被回显并存储为1。 递减null将创建null,该值存储为null,并作为空字符串回显 代码:() 输出: --- array ( 0 =

为什么在PHP(7.3)中可以这样做?它有什么使用案例吗


这种奇怪的推送技术是我无法想象在项目中需要的,而且很可能会让未来的脚本读者感到困惑

从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
)。中描述了这种行为