在迁移到PHP 7.4时,我必须处理某些数组函数(例如reset()
,current()
或end()
涉及ArrayObject)的不同行为。以下示例产生不同的输出:
<?php
$array = new \ArrayObject(["a", "b"]);
$item = end($array);
var_dump($item);
$array = ["a", "b"];
$item = end($array);
var_dump($item);
使用php 7.4的输出是:
bool(false)
string(1) "b"
在7.4之前的PHP版本上,输出如下:
string(1) "b"
string(1) "b"
A end($array->getArrayCopy())
会发出通知,但如果与变量一起使用,可能会变通。
有没有办法模仿的行为end()
与一个ArrayObject
或ArrayIterator
?ArrayObject可能非常大,到最后的迭代可能不是最佳解决方案。
我想说这是一个PHP错误,更改日志中绝对没有任何内容可以表明这是7.4中的预期更改
—
iainn
在线测试:3v4l.org/4MADI
—
0stone0
@PatrickQ如果是关联的怎么办?
—
安德烈亚斯
@iainn这绝对不是一个错误- php.net/manual/en/...
—
u_mulder
$item = $array[count($array)-1];
。不确定这是否是最有效的解决方案。