2014-10-21 1 views
8

Ich schrieb ein Stück Tutorial-Code und lief in etwas ziemlich seltsam nach dem Ausführen.Ampersand am Ende des Arrays vorangestellt var_dump

Meine Chrome-Erweiterung Var Dumpling konnte den letzten Eintrag im Array nicht sehen, da ein Ampersand an den Typ des Werts angehängt wurde.

ich mit diesem Stück Code getestet:

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

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

var_dump($alphabet); 

Das Ergebnis der var_dump ist:

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

Sie, dass der letzte Eintrag &string(2) "ca" ist zu sehen, statt dem, was ich string(2) "ca" erwarten würde. Es gibt kein Problem im Logikteil, ich kann $alphabet[2] aufrufen und es würde den Wert des letzten Eintrags ca zurückgeben.

Was ich frage mich ist, ist diese Konvention oder ein seltsames hickup in PHP?

Antwort

8

Dies bezeichnet eine Variable als Referenz und ist vollkommen gültig. In den meisten Fällen ignorieren Sie es einfach und fahren fort.

In diesem speziellen Fall bedeutet dies wahrscheinlich, dass das letzte Element Ihres Arrays immer noch von Ihrer foreach-Schleife referenziert wird. Da Sie es dort als Referenz verwendet haben und das letzte Element der Schleife nach dem Schließen der Schleife noch vorhanden ist, ist die Referenz für dieses Element immer noch vorhanden. Oder kurz:

Nach Ihrer Schleife ist $ Buchstabe immer noch eine Referenz auf $ Alphabet [2]. Wenn Sie unset($letter), sollte das Und-Zeichen verschwinden.

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