LINUX.ORG.RU

Пыхпых ругается на [

 , ,


0

1

Собственно, перерабатываю не мой код под изменившиеся требования. Приходится разбирать огромный входной 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']);
 — выдаёт ту же ошибку. Таким образом, предшественник просто не стал трахаться с проблемой и пошёл по неудобному, но рабочему пути. Я ещё понимаю, если бы там ошибка времени выполнения была — напутал со структурой, не массив на самом деле... Но ведь это ошибка парсера! Почему он не считает, что возвращённый функцией результат может быть массивом? Багофича или я бревна в глазу не вижу, как всегда, и вообще не понимаю сути похапэ?

Господи, зачем я сюда зашел, меня щас вырвет.

postman_ ★☆ ()
Ответ на: комментарий от postman_

Пыхпых в заголовке и пыхпых в тегах, сколько ещё предупредительных знаков надо поставить, чтобы пожалеть впечатлительных?

MiniRoboDancer ★☆ ()

да это не проблема, это фича. по моему нельзя так да и всё. это пхп, привыкай.

AndreyKl ★★★★★ ()

напиши по людски

$a = $this->end($segment['leg']);
$end = strtotime($a['arrivalTime']);

ругается?

AndreyKl ★★★★★ ()
Последнее исправление: AndreyKl (всего исправлений: 1)
Ответ на: комментарий от AndreyKl

по людски

На хрена плодить переменные, если они используются один раз? Так-то я сразу подумал о таком воркэраунде, но решил сперва спросить.

MiniRoboDancer ★☆ ()

IMHO это фича пхп 5.4+

vel ★★★★★ ()
Ответ на: комментарий от vel

Возможно (ибо вряд ли там только объявление через [ ] впилили), но почему тогда с дополнительными скобками ругайцо?

MiniRoboDancer ★☆ ()

Почему он не считает, что возвращённый функцией результат может быть массивом?

ну тогда уж не массив, а ссылка на массив нужна. Это у тебя не l-value.

emulek ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.