ArrayObject 不适用于 PHP 7.4 中的 end()

Tre*_*her 9 php php-7.4

在迁移到 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);
Run Code Online (Sandbox Code Playgroud)

使用php 7.4,输出为:

bool(false)
string(1) "b"
Run Code Online (Sandbox Code Playgroud)

在 7.4 之前的 PHP 版本上,输出如下:

string(1) "b"
string(1) "b"
Run Code Online (Sandbox Code Playgroud)

Aend($array->getArrayCopy())产生一个通知,但如果与变量一起使用可能是一种解决方法。

有没有办法模拟end()with an ArrayObjector的行为ArrayIterator?ArrayObject 可能非常大,迭代到最后可能不是最好的解决方案。

Jso*_*owa 3

PHP 7.4开始,数组方法不对内部数组进行操作,而是对其ArrayObject本身进行操作。我为此总结了两种解决方案。

1.获取对象内部数组。

$array = new \ArrayObject(["a", "b"]);
$item = end($array->getArrayCopy());
Run Code Online (Sandbox Code Playgroud)

2.创建 FacadeArrayObject并将自定义方法 end() 添加到升级的类中。