Нижние версии php жалуются на скобки. Почему? [Дубликат]

0

Я развиваю локально с помощью Mamp, и все было здорово, пока я не загрузился на сервер. Я сузил свою проблему до того, чтобы иметь дело с версией php. Mamp работал на более новой версии, чем сервер.

Если я запустил Mamp на PHP 5.6.2 (или 5.5.X), у меня нет проблем с моим кодом. Но если все, что я делаю, это изменить версию PHP в настройках Mamp на PHP 5.3.29, если вы жалуетесь на следующую строку кода:

$shipping = reset($arrShipOptions['options'])[0]['price'];

Ошибка:

синтаксическая ошибка, неожиданно '['

Первое, что пришло в голову, это то, что reset() может быть новой функцией. Но согласно http://php.net/manual/en/function.reset.php он уже был доступен в PHP 4

Может ли дополнительная пара глаз пролить свет на это, пожалуйста. благодаря

  • 0
    Это из-за доступа к массиву! Смотрите: php.net/manual/en/language.types.array.php для версии 5.4 и выше
  • 3
    Поскольку array dereferencing не было доступно до PHP 5.4
Показать ещё 2 комментария
Теги:
syntax-error

3 ответа

3
Лучший ответ

В более старых версиях PHP вам нужно назначить результат из reset (или любой другой функции) в переменную, а затем получить доступ к ней с помощью [].

 $shipping = reset($arrShipOptions['options']);
 $shipping = $shipping[0]['price'];
  • 1
    Вау! Я думаю, это был простой вопрос, на который почти все знали ответ, кроме меня. Спасибо за помощь. +1 за быстрый ответ. Будет помечен как правильный, когда ТАК позволяет мне.
0

перед php 5.4 вы не можете использовать такой синтаксис... http://docs.php.net/manual/en/language.types.array.php

Это называется разыменованием массива. Он недоступен в php 5.3

// on PHP 5.4
$secondElement = getArray()[1];

// previously
$tmp = getArray();
$secondElement = $tmp[1];
0

Проблема вызвана использованием доступной функции PHP 5. 4+

Разыменование разметки

Источник http://php.net/manual/en/migration54.new-features.php (третья функция)

Решение разбивает код на две строки:

$shipping = reset($arrShipOptions['options']);
$shipping = $shipping[0]['price'];

Ещё вопросы

Сообщество Overcoder
Наверх
Меню