Al migrar a PHP 7.4 tengo que lidiar con un comportamiento diferente de algunas funciones de matriz como reset(), current()o con end()respecto a ArrayObject. El siguiente ejemplo produce diferentes salidas:
<?php
$array = new \ArrayObject(["a", "b"]);
$item = end($array);
var_dump($item);
$array = ["a", "b"];
$item = end($array);
var_dump($item);
Con php 7.4 el resultado es:
bool(false)
string(1) "b"
En las versiones de PHP anteriores a 7.4, el resultado es el siguiente:
string(1) "b"
string(1) "b"
A end($array->getArrayCopy())produce un aviso, pero podría ser una solución si se usa con una variable.
¿Hay alguna manera de emular el comportamiento de end()con un ArrayObjecto ArrayIterator? El ArrayObject podría ser muy grande, una iteración hasta el final podría no ser la mejor solución.
$item = $array[count($array)-1];. No estoy seguro si esa es la solución más eficiente.