Эта странная техника подталкивания - это то, что я не могу себе представить, нуждаясь в проекте, и с большой вероятностью могло бы смутить будущих читателей сценария.
Из 3v4l.org кажется, что это поведение согласуется с php7 .2 и выше.
Первый шаг - это постинкремент, поэтому перед его увеличением отображается начальный $foo[]
, равный null
.
Вторые два приращения предварительные приращения, поэтому они отражают увеличенное значение.
При увеличении null
создается 1
, который отображается и сохраняется как 1
. При уменьшении null
создается null
, который сохраняется как null
и отображается как пустая строка.
Код: ( Демо )
$foo = [10, 20, 30];
echo $foo[]++;
echo "\n---\n";
var_export($foo);
echo "\n---\n";
echo ++$foo[], "\n", --$foo[], "\n";
var_export($foo);
echo "\n===\n";
var_export(--$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
Что-то, что изменилось с php7 .3, это то, что array_push()
теперь будет принимать один параметр. ( Demo )
$foo = [];
array_push($foo);
var_export($foo);
Приведенный выше фрагмент не имеет эффекта - он не добавляет новый элемент. Счетчик остается нулевым, но предупреждение php7 .3.
не генерируется