2010-11-16 12 views
5

He estado ejecutando algunas pruebas simples de depuración contra matrices, y he notado que cuando hago un var_dump() de una matriz, la salida marca cualquier elemento en la matriz a la que hace referencia otra variable. Como un experimento sencillo, me encontré con el siguiente código:Observación inesperada: var_dump() de una matriz está marcando elementos referenciados ... ¿desde cuándo?

$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 />'; 

que da el siguiente resultado:

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 el símbolo ∫ junto con el elemento 3 y, posteriormente, el elemento 1. Tenga en cuenta también que esas entradas don' t muestra el tipo de datos de la entrada.

Después de algunos experimentos, no veo esto si var_dump un tipo escalar, o con objetos o recursos. Si la matriz contiene datos de cadena, el símbolo es & (y todavía muestra el tipo de datos), del mismo modo con las entradas float, boolean y object.

Esto se está ejecutando en PHP 5.2.8

Primera pregunta: ¿Cuándo comenzó esta conducta, o es algo que simplemente no he dado cuenta antes?

Segunda pregunta: Si los elementos mencionados se pueden marcar de esta manera por var_dump(), ¿hay alguna función en PHP núcleo que me permitirá identificar si un elemento de matriz es referenciado por otra variable; ¿O que devolverá la bandera de refcount o ref de una _zval_struct?

Respuesta

4

No estoy seguro si esto responde a su pregunta, pero se puede utilizar

debug_zval_dump($array); 

para obtener el refcount:

array(4) refcount(2){ 
    [0]=> long(1) refcount(1) 
    [1]=> &long(2) refcount(2) 
    [2]=> long(3) refcount(1) 
    [3]=> &long(4) refcount(2) 
} 

también ver este Article by Derick Rethans (PHP Core Dev) about Refcounting.

Cuestiones relacionadas