Ao migrar para o PHP 7.4, eu tenho que lidar com um comportamento diferente de algumas funções de array como reset()
, current()
ou end()
relativas a ArrayObject. O exemplo a seguir produz saídas diferentes:
<?php
$array = new \ArrayObject(["a", "b"]);
$item = end($array);
var_dump($item);
$array = ["a", "b"];
$item = end($array);
var_dump($item);
Com o php 7.4, a saída é:
bool(false)
string(1) "b"
Nas versões do PHP anteriores à 7.4, a saída é a seguinte:
string(1) "b"
string(1) "b"
A end($array->getArrayCopy())
produz um aviso, mas pode ser uma solução alternativa se usado com uma variável.
Existe uma maneira de imitar o comportamento de end()
com um ArrayObject
ou ArrayIterator
? O ArrayObject pode ser muito grande, uma iteração até o final pode não ser a melhor solução.
$item = $array[count($array)-1];
. Não tenho certeza se essa é a solução mais eficiente.