Ho appena eseguito alcuni semplici test di debug sugli array e ho notato che quando eseguo un var_dump() di un array, l'output sta contrassegnando qualsiasi elemento dell'array a cui fa riferimento un'altra variabile. Come un semplice esperimento, ho eseguito il seguente codice:Osservazione inaspettata: var_dump() di un array indica gli elementi di riferimento ... da quando?
$array = range(1,4);
var_dump($array);
echo '<br />';
foreach($array as &$value) {
}
var_dump($array);
echo '<br />';
$value2 = &$array[1];
var_dump($array);
echo '<br />';
che dà il seguente risultato:
array(4) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) }
array(4) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> ∫(4) }
array(4) { [0]=> int(1) [1]=> ∫(2) [2]=> int(3) [3]=> ∫(4) }
Nota il simbolo ∫ fianco elemento 3 e, successivamente, elemento 1. Si noti, inoltre, che tali voci don' t mostra il tipo di dati della voce.
Dopo alcuni esperimenti, non vedo questo se var_dump un tipo scalare, o con oggetti o risorse. Se la matrice contiene dati di stringa, il simbolo è & (e mostra ancora il tipo di dati), analogamente con voci float, booleane e oggetto.
Questo è in esecuzione contro PHP 5.2.8
Prima domanda: Quando ha fatto questo inizio comportamento, o è qualcosa che semplicemente non ho notato prima d'ora?
Seconda domanda: se gli elementi di riferimento possono essere contrassegnati in questo modo da var_dump(), c'è una funzione nel core PHP che mi consentirà di identificare se un elemento di matrice è referenziato da un'altra variabile; o che restituirà il refcount o l'indicatore di riferimento da una _zval_struct?