Возвращение массивов в php вызывает синтаксическую ошибку - PullRequest
4 голосов
/ 10 ноября 2009
function get_arr() {
    return array("one","two","three");
}

echo get_arr()[0];

Почему вышеприведенный код выдает следующую ошибку?

parse error: syntax error, unexpected '['

Ответы [ 6 ]

7 голосов
/ 10 ноября 2009

Это просто ограничение синтаксиса PHP. Вы не можете индексировать возвращаемое значение функции, если функция возвращает массив. Там нет ничего плохого в вашей функции; скорее это показывает доморощенную природу PHP. Подобно мячу катамари, он со временем приобрел характер и синтаксис довольно случайным образом. Это не было продумано с самого начала, и это синтаксическое ограничение является доказательством этого.

Аналогично, даже эта более простая конструкция не работает:

// Syntax error
echo array("one", "two", "three")[0];

Чтобы обойти это, вы должны присвоить результат переменной, а затем индексировать переменную:

$array = get_arr();
echo $array[0];

Как ни странно, они правильно поняли предметы. get_obj()->prop синтаксически действителен и работает как положено. Пойди разберись.

2 голосов
/ 10 ноября 2009

Вы не можете напрямую ссылаться на возвращаемые массивы, как это. Вы должны присвоить его временной переменной.

$temp = get_arr();
echo $temp[0];
0 голосов
/ 10 ноября 2009

Вы также можете сделать

 list($firstElement) = get_arr();
0 голосов
/ 10 ноября 2009

Действительно, вы не единственный, кто хочет получить такую ​​возможность: отчет об ошибках PHP # 45906

0 голосов
/ 10 ноября 2009

Я почти уверен, если вы сделаете:

$myArray = get_arr();
echo $myArray[0];

Это будет работать. Вы не можете использовать браслет напрямую.

0 голосов
/ 10 ноября 2009

«потому что вы не можете сделать», это не очень утешительный ответ. Но это так. Вы не можете сделать function_which_returns_array()[$offset]; Вы должны сохранить возвращаемое значение в $ var, а затем получить к нему доступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...