Dotyczące migracji do PHP 7.4 mam do czynienia z innym zachowaniem pewnych funkcji, takich jak tablicy reset()
, current()
lub end()
dotycząca ArrayObject. Poniższy przykład przedstawia różne wyniki:
<?php
$array = new \ArrayObject(["a", "b"]);
$item = end($array);
var_dump($item);
$array = ["a", "b"];
$item = end($array);
var_dump($item);
W przypadku php 7.4 wynikiem jest:
bool(false)
string(1) "b"
W wersjach PHP wcześniejszych niż 7.4 wyniki są następujące:
string(1) "b"
string(1) "b"
A end($array->getArrayCopy())
generuje powiadomienie, ale może być obejściem, jeśli jest używane ze zmienną.
Czy istnieje sposób naśladowania zachowania end()
za pomocą ArrayObject
lub ArrayIterator
? ArrayObject może być bardzo duży, iteracja do końca może nie być najlepszym rozwiązaniem.
$item = $array[count($array)-1];
. Nie jestem pewien, czy jest to najbardziej wydajne rozwiązanie.