2014-10-21 14 views
8

Bir öğretici kod parçası yazdım ve çalıştırdıktan sonra oldukça garip bir şeyle karşılaştım.Dizinin sonunda ampersan ve prepended var_dump

Chrome uzantım Var Dumpling, dizinin son girişini görmedi çünkü bir ve işareti, değerin türüne eklenmişti.

Ben bu kod parçası ile test: var_dump ait

$alphabet = array('a', 'b', 'c'); 

foreach ($alphabet as &$letter) { 
    $letter .= 'a'; 
} 

var_dump($alphabet); 

sonucudur:

array(3) { 
    [0]=> 
    string(2) "aa" 
    [1]=> 
    string(2) "ba" 
    [2]=> 
    &string(2) "ca" 
} 

Geçen giriş yerine ben string(2) "ca" beklediğiniz &string(2) "ca" olduğunu görebilirsiniz. Bunun mantık kısmında sorun yok, ben $alphabet[2]'u arayabilirim ve ca son girişinin değerini döndürür.

Acaba merak ettiğim şey şu: PHP'de bu kongre mi yoksa garip hıçkırık mı?

cevap

8

Bu, Referans olarak bir değişkeni ifade eder ve tam olarak geçerlidir. Çoğu durumda, sadece görmezden gelin ve devam edin.

Bu özel durumda, büyük olasılıkla dizinin son öğesinin foreach döngüsünden referans alındığı anlamına gelir. Bunu bir Referans olarak kullandığınızdan ve döngü kapandıktan sonra döngüden son öğe hala mevcut olduğundan, o öğe üzerindeki referans hala oradadır. Veya kısaca:

Döngüsünüz bittikten sonra, $ harfleri hala $ alfabesine referanstır [2]. unset($letter), bu işareti ve işareti kaybolur.

http://php.net/manual/en/language.references.php