Синтаксис: массивы, return...

Духовность™

Продвинутый новичок
Синтаксис: массивы, return...

Почему не работает конструкция:
PHP:
function getarray()
{
    return array('key' => 'value');
}

echo getarray()['key'];
что мешает интерпритатору корректно обрабатывать этот код? :(

У меня есть реальный код:

PHP:
$Request = Request::getInstance();

// Получили в $get объект, реализующий интерфейс ArrayAccess
$get = $Request->getGet();
echo $get['key']; // работает 

$Request->getGet()['key']; // Parse error: syntax error, unexpected '[' in Z:\home\test\www\index.php on line 19
не сложно понять, что хочу - не хочу создавать лишнюю переменную $get при любой нужде получить значение из объекта $Request->getGet(). __get тут не поможет, ибо юзаю ArrayAccess с возможностью многомерного доступа (echo $obj['a']['b']['c']).

Кстати, в JS это работает без проблем, ибо любой хэш там - объект, а доступ к элементу объекта как к массиву
PHP:
function foo()
{
    return arr = {'key': 'val'};
}

alert (foo()['key']);
удобно.
 

dimagolov

Новичок
triumvirat, пару месяцев назад была большая холиварная тема по этому вопросу с идеями "это пипец как удобно, аля JS" и "нефиг возвращать массив, когда можно сделать дополнительный (даже необязательный) параметр у ф-ии и заставить ее сразу возвращать нужный элемент."
 

Духовность™

Продвинутый новичок
да? а я не видел :D

заставить ее сразу возвращать нужный элемент
это костыль, ИМХО...

Во какая идея пришла (с помощью __get):

PHP:
$get['a']['b']['c']['d'] = 2; 
/*ArrayAccessImpl Object
(
    [data:protected] => Array
        (
            [a] => ArrayAccessImpl Object
                (
                    [data:protected] => Array
                        (
                            [b] => ArrayAccessImpl Object
                                (
                                    [data:protected] => Array
                                        (
                                            [c] => ArrayAccessImpl Object
                                                (
                                                    [data:protected] => Array
                                                        (
                                                            [d] => 2
                                                        )
                                                )
                                        )
                                )
                        )
                )
        )
)*/

echo $Request->getGet()->a['b']['c']['d']; // печатает 2
т.е. суть в том, что через __get, т.е. через стрелочку -> я получаю корневой элемент, а далее стандартно, через скобочки :)
 

iceman

говнокодер
Однако PHP поддерживает конструкцию list(), предлагающую концептуально иной способ работы с массивами, предоставляя разработчику возможность поместить элементы массива сразу в переменные.
from: http://ru.wikipedia.org/wiki/PHP

-~{}~ 28.07.09 18:59:

брр, меня дико раздражают квадратные скобки +)

-~{}~ 28.07.09 19:01:

да list тебе не подойдет +)
 

zerkms

TDD infected
Команда форума
функция не должна возвращать лишних данных.
 
Сверху