2014-10-21 18 views
8

Ho scritto un pezzo di codice tutorial e mi sono imbattuto in qualcosa di molto strano dopo averlo eseguito.E commerciale anteposto alla fine dell'array var_dump

L'estensione Chrome Var Dumpling non ha visto l'ultima voce nell'array perché è stata aggiunta una e commerciale al tipo di valore.

ho provato con questo pezzo di codice:

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

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

var_dump($alphabet); 

Il risultato della var_dump è:

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

Si può vedere che l'ultima voce è &string(2) "ca" invece di quello che mi sarei aspettato string(2) "ca". Non c'è alcun problema nella parte logica di questo, posso chiamare $alphabet[2] e restituirebbe il valore dell'ultima voce ca.

Quello che mi chiedo è, questa convenzione o qualche strana intesa in PHP?

risposta

8

Ciò indica una variabile come Riferimento ed è perfettamente valida. Nella maggior parte dei casi, ignoralo e continua.

In questo caso speciale, probabilmente significa che l'ultimo elemento dell'array viene ancora referenziato dal ciclo foreach. Poiché lo hai usato come riferimento e l'ultimo elemento del ciclo esiste ancora dopo la chiusura del ciclo, il riferimento su quell'elemento è ancora lì. In breve:

Dopo il ciclo, $ lettera è ancora un riferimento a $ alfabeto [2]. Se si unset($letter), la e commerciale dovrebbe sparire.

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

Problemi correlati