на моем localhost [PHP Version 5.5.9-1ubuntu4.5] этот код работает:
array($userName => ['score' => $score]);
а также этот код работает:
$this->Auth->user()['id']
но на производственном сервере [PHP Version 5.3.3-7 + squeeze23] в обоих случаях у меня есть ошибка:
Ошибка: Fatal Error (4): ошибка синтаксиса, неожиданная '['
что происходит? как я могу исправить это простейшим способом? (потому что изменение всех массивов в проекте крайне невыполнимо, и я даже не уверен, как управлять вторым случаем с помощью Auth …)
Первый заключается в том, что новый синтаксис []
для создания экземпляров массивов работает только в 5.4 и выше . Итак, замените его на array()
:
// 5.4+ only: array($userName => ['score' => $score]); // 5.3 (and earlier) and 5.4+ array($userName => array('score' => $score));
Вторая – это другая функция 5.4 – доступ к массивам, возвращаемым из функций , где вы должны использовать временную переменную:
// 5.4+ only: $this->Auth->user()['id'] // 5.3 (and earlier) and 5.4+: $result = $this->Auth->user() $result[id]
Или, для предпочтения, обновите свой производственный сервер до версии PHP, которая немного более современна, чем используемая вами четырех- или пятилетняя версия. Чтобы сэкономить на большей части этих головных болей, вам либо нужно это сделать, либо начать развивать локально в 5.3. (Если вам нужно сделать последнее, я бы посмотрел на виртуализацию вашей установки разработки, чтобы вы могли работать в виртуальной коробке против 5.3 для более старых производственных систем.)
Этот синтаксис не поддерживается до версии php 5.4
Вы можете видеть это здесь:
Синтаксис квадратной скобки для массивов был введен в php v. 5.4. То же самое касается использования возвращаемых значений функции или метода