На переходе к 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);
С php 7.4 на выходе получается:
bool(false)
string(1) "b"
В версиях PHP до 7.4 вывод выглядит следующим образом:
string(1) "b"
string(1) "b"
A end($array->getArrayCopy())
создает уведомление, но может использоваться в качестве обходного пути, если используется с переменной.
Есть ли способ подражать поведению end()
с ArrayObject
или ArrayIterator
? ArrayObject может быть очень большим, итерация до конца может оказаться не лучшим решением.
$item = $array[count($array)-1];
. Не уверен, что это самое эффективное решение.