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 ArrayObject
o 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.