Je viens d'exécuter des tests de débogage simples sur des tableaux, et j'ai remarqué que lorsque je fais un var_dump() d'un tableau, la sortie signale tout élément du tableau qui est référencé par une autre variable. Comme une expérience simple, je courais le code suivant:Observation inattendue: var_dump() d'un tableau signale les éléments référencés ... depuis quand?
$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 />';
qui donne le résultat suivant:
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) }
Notez le symbole ∫ à côté de l'élément 3 et ensuite l'élément 1. Notez également que les entrées n » t montre le type de données de l'entrée. Après quelques expérimentations, je ne vois pas ceci si je var_dump un type scalaire, ou avec des objets ou des ressources. Si le tableau contient des données de chaîne, le symbole est & (et il affiche toujours le type de données), de même que float, boolean et les entrées d'objet.
C'est en cours d'exécution contre PHP 5.2.8
Première question: Quand est-ce début de comportement, ou est-ce quelque chose que j'ai tout simplement pas remarqué avant? Deuxième question: Si les éléments référencés peuvent être marqués de cette manière par var_dump(), y a-t-il une fonction dans le noyau PHP qui me permettra d'identifier si un élément du tableau est référencé par une autre variable; ou qui va retourner le drapeau refcount ou ref d'un _zval_struct?