Php diziler dönen sözdizimi hatası neden olur

6 Cevap
function get_arr() {
    return array("one","two","three");
}

echo get_arr()[0];

Neden Yukarıdaki kod aşağıdaki hata atmak mı?

parse error: syntax error, unexpected '['

6 Cevap

Bu sadece PHP'nin sözdizimi bir kısıtlamadır. Sen fonksiyonu bir dizi döndürür eğer dizin bir işlevin dönüş değeri olamaz. Lütfen fonksiyonu ile yanlış bir şey yok; yerine bu PHP homebrewed doğasını gösterir. Bir katamari topu gibi oldukça gelişigüzel bir şekilde zamanla özellikleri ve sözdizimi büyüdü. Bu baştan düşünülmüş ve bu sözdizimsel sınırlama bunun delilidir değildi.

Benzer şekilde, hatta bu basit yapı çalışmaz:

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

Eğer bir değişken ve sonra dizin değişken sonucu atamak zorundadır geçici çözüm:

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

İşin tuhafı onlar doğru nesneler ile aldım. get_obj()->prop, sözdizimsel olarak geçerli olduğu ve beklendiği gibi çalışır. Rakam gidin.

Bu doğrudan gibi döndü diziler başvuramaz. Siz geçici bir değişkene atamak zorunda.

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

Bu çok satifying cevap değil "sen yapamazsın, çünkü". Ama bu durum. Sen function_which_returns_array()[$offset]; Bir $ var içinde dönüş değerini saklamak ve daha sonra erişmek için var olamaz.

Ben bunu yaparsanız eminim:

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

Bu eserler olacak ki. Sen braket doğrudan kullanamazsınız.

Gerçekten de, istediğiniz tek değildir böyle bir özellik geliştirme: PHP Hata raporu #45906

sen de yapabilirsin

 list($firstElement) = get_arr();