gpt4 book ai didi

php - 无键递增数组访问表达式

转载 作者:行者123 更新时间:2023-12-02 07:16:38 25 4
gpt4 key购买 nike

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

<?php

$foo = [10, 20, 30];
echo $foo[]++, "\n", ++$foo[], "\n", ++$foo[], "\n";

输出:

php test.php

1
1

我预计会出现如下读取错误。

<?php

$foo = [10, 20, 30];
$foo[] += 1; // No error either
$foo[] = $foo[] + 1; //PHP Fatal error: Cannot use [] for reading in

最佳答案

$foo[]++ 首先在 $foo 中创建一个新的 null 条目,该条目被回显,产生一个空行(因为 echo null; 什么也不输出)。 $foo 中的新条目随后会递增,因此 null 的类型会以整数形式调整为 0,从而产生值 1 .

++$foo[]$foo 中创建另一个新的 null 条目,在这种情况下,它在输出之前递增,因此有 1 的两行。

如果您将代码更改为使用 var_dump 而不是 echo 您可以更清楚地看到这一点:

$foo =  [10, 20, 30];
var_dump($foo[]++);
var_dump(++$foo[]);
var_dump(++$foo[]);
var_dump($foo);

输出:

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)
}

Demo on 3v4l.org

注意,与递增 null 不同,导致 1递减 nullno 效果(var_dump(--$foo[]) 输出 null)。 manual 中描述了这种行为。 .

关于php - 无键递增数组访问表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61423329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com