Собственно, перерабатываю не мой код под изменившиеся требования. Приходится разбирать огромный входной JSON до пяти уровней вложенности, если не считать массивов из сложных объектов. В том числе кое-где надо брать последний элемент массива, являющийся ассоциативным массивом большой вложенности. В предыдущей реализации таких мест было меньше, и в них предыдущий программист доступался к последним элементам через <большая_бандура>[count(<большая_бандура>-1]. Я поначалу счёл это говнокодом и заюзал во всех местах православный end. Но парсер ругайцо на Unexpected '['
, например, в такой конструкции:
$end = strtotime(end($segment['leg'])['arrivalTime']);
Почитал внимательно доку по end, смотрю — это какая-то НЁХ, переставляющая внутренний итератор (жабостайл, чо) и возвращающая последний элемент лишь в качестве бонуса. Ну фиг с ней, думаю, навелосипедил свой end:
private function end($array)
{
return $array[count($array)-1];
}
$end = strtotime($this->end($segment['leg'])['arrivalTime']);
А оно всё равно ругайцо. Что характерно, syntastic (хз, через что он там пыхокод прогоняет; если что, на тестовом сервере пыха не выше 5.3, а у меня на локалхосте свежая) ни на первый, ни на второй вариант не ругается. А вот когда завернул в скобочки:
$end = strtotime(($this->end($segment['leg']))['arrivalTime']);
— выдаёт ту же ошибку. Таким образом, предшественник просто не стал трахаться с проблемой и пошёл по неудобному, но рабочему пути. Я ещё понимаю, если бы там ошибка времени выполнения была — напутал со структурой, не массив на самом деле... Но ведь это ошибка парсера! Почему он не считает, что возвращённый функцией результат может быть массивом? Багофича или я бревна в глазу не вижу, как всегда, и вообще не понимаю сути похапэ?