Синтаксис PHP для результата разыменования функции - PullRequest
34 голосов
/ 13 апреля 2009

Фон

В любом другом языке программирования, который я использую на регулярной основе, просто работать с возвращаемым значением функции без объявления новой переменной для хранения результата функции.

Однако в PHP это не так просто:

example1 (результат функции - массив)

<?php 
function foobar(){
    return preg_split('/\s+/', 'zero one two three four five');
}

// can php say "zero"?

/// print( foobar()[0] ); /// <-- nope
/// print( &foobar()[0] );     /// <-- nope
/// print( &foobar()->[0] );     /// <-- nope
/// print( "${foobar()}[0]" );    /// <-- nope
?>

example2 (результатом функции является объект)

<?php    
function zoobar(){
  // NOTE: casting (object) Array() has other problems in PHP
  // see e.g., http://stackoverflow.com/questions/1869812
  $vout   = (object) Array('0'=>'zero','fname'=>'homer','lname'=>'simpson',);
  return $vout;
}

//  can php say "zero"?       
//  print zoobar()->0;         //  <- nope (parse error)      
//  print zoobar()->{0};       //  <- nope                    
//  print zoobar()->{'0'};     //  <- nope                    
//  $vtemp = zoobar();         //  does using a variable help?
//  print $vtemp->{0};         //  <- nope     

Кто-нибудь может подсказать, как это сделать в PHP?

Ответы [ 22 ]

0 голосов
/ 25 июля 2009

Это работает?

 return ($foo->getBarArray())[0];

В противном случае, вы можете опубликовать функцию getBarArray ()? Я не понимаю, почему это не сработает из того, что вы уже опубликовали.

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

Вы можете использовать ссылки:

$ref =& myFunc();
echo $ref['foo'];

Таким образом, вы не создаете дубликат возвращаемого массива.

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