2009-11-10 7 views
4
function get_arr() { 
    return array("one","two","three"); 
} 

echo get_arr()[0]; 

Pourquoi le code ci-dessus génère-t-il l'erreur suivante?Retour des tableaux dans php provoque une erreur de syntaxe

 
parse error: syntax error, unexpected '[' 
+0

double possible de [Tableau PHP Syntaxe Parse Erreur gauche CROCHET " \ ["] (http://stackoverflow.com/questions/11912233/php-array-syntax-parse-error-left-square-bracket) –

Répondre

7

Ceci est simplement une limitation de la syntaxe de PHP. Vous ne pouvez pas indexer la valeur de retour d'une fonction si la fonction retourne un tableau. Il n'y a rien de mal à votre fonction; plutôt cela montre la nature homebrewed de PHP. Comme une balle katamari, elle a développé des caractéristiques et une syntaxe au fil du temps de manière plutôt aléatoire. Il n'a pas été pensé depuis le début et cette limitation syntaxique en est la preuve.

De même, même cette simple construction ne fonctionne pas:

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

Pour contourner le problème, il vous devez affecter le résultat à une variable, puis l'indice de la variable:

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

Étrangement ils l'ont obtenu à droite avec des objets. get_obj()->prop est syntaxiquement valide et fonctionne comme prévu. Allez comprendre.

+0

Merci d'avoir pris le temps de confirmer mes soupçons. – BinaryPie

+0

+1 pour la référence Katamari <3, Vous pouvez également convertir votre tableau en un objet 'return (object) $ result' Documentation PHP:" Les tableaux convertissent en un objet avec des propriétés nommées par des clés, et des valeurs correspondantes. " http://php.net/manual/fr/language.types.object.php – yoshi

2

Vous ne pouvez pas référencer directement les tableaux retournés comme cela. Vous devez l'assigner à une variable temporaire.

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

"parce que vous ne pouvez pas faire" ce n'est pas une réponse très satisfaisant. Mais c'est le cas. Vous ne pouvez pas faire function_which_returns_array()[$offset]; Vous devez stocker la valeur de retour dans un $ var et ensuite y accéder.

0

Je suis assez sûr que si vous le faites:

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

que ce sera des œuvres. Vous ne pouvez pas utiliser le braket directement.

0

En effet, vous n'êtes pas le seul à vouloir une telle amélioration de la fonctionnalité: PHP rapport de bogue #45906

0

vous pouvez également faire

list($firstElement) = get_arr();