【发布时间】:2020-06-05 21:57:21
【问题描述】:
在迁移到 PHP 7.4 时,我必须处理一些数组函数的不同行为,例如与 ArrayObject 相关的 reset()、current() 或 end()。以下示例产生不同的输出:
<?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"
end($array->getArrayCopy()) 会生成通知,但如果与变量一起使用,可能是一种解决方法。
有没有办法用ArrayObject 或ArrayIterator 模拟end() 的行为? ArrayObject 可能非常大,迭代到最后可能不是最佳解决方案。
【问题讨论】:
-
另一种可能是
$item = $array[count($array)-1];。不确定这是否是最有效的解决方案。 -
我会说这是一个 PHP 错误,更新日志中肯定没有任何内容表明这是 7.4 中的预期更改
-
在线测试:3v4l.org/4MADI
-
@PatrickQ 如果它是关联的怎么办?
-
@iainn 这绝对不是错误 - php.net/manual/en/…