W3docs

debug_zval_dump()

La función debug_zval_dump() en PHP muestra la representación interna de una variable, incluyendo su conteo de referencias y estado is_ref.

Introducción

La función debug_zval_dump() es una función integrada de PHP que imprime la representación interna de una variable tal como la almacena el motor Zend — no solo su valor, sino también su conteo de referencias (refcount) y si es una referencia (is_ref). Esto la convierte en una ventana hacia la gestión de memoria de PHP, especialmente su optimización de copia en escritura (copy-on-write).

Un zval ("Zend value") es el contenedor a nivel C que PHP utiliza para cada variable. Varios nombres de variable pueden apuntar al mismo zval subyacente; PHP solo hace una copia física cuando uno de ellos es modificado. debug_zval_dump() permite observar ese seguimiento interno en acción.

Obsoleta y eliminada. Esta función fue declarada obsoleta en PHP 7.2 y eliminada en PHP 8.0. Solo funciona en versiones legacy de PHP (hasta 7.4). En PHP 8+ no existe — consulte las alternativas modernas a continuación antes de usarla.

Si solo desea inspeccionar el tipo y el valor de una variable, use var_dump() en su lugar — funciona en todas las versiones de PHP y es la herramienta de depuración de uso cotidiano.

Sintaxis

La sintaxis de la función debug_zval_dump() es la siguiente:

La sintaxis PHP de debug_zval_dump()

void debug_zval_dump(mixed $variable, mixed ...$rest): void

La función acepta una o más variables e imprime la representación interna de cada una. No devuelve nada (void) — escribe directamente al flujo de salida. Cada línea de salida sigue el patrón:

type(value) refcount(N)
  • type(value) — la misma notación de tipo/valor que usa var_dump(), por ejemplo string(5) "hello", int(42).
  • refcount(N) — cuántos manejadores zval apuntan actualmente a este valor. Cuando is_ref está activo, la salida también imprime is_ref=true.

Ejemplo de uso

A continuación se muestra un ejemplo de cómo usar la función debug_zval_dump() en PHP:

Ejemplo de PHP debug_zval_dump()

php— editable, runs on the server

Aquí $b está enlazado por referencia a $a, por lo que ambos nombres comparten un zval marcado como referencia. Llamar a debug_zval_dump() en cualquiera de ellos imprime el mismo valor interno:

string(5) "hello" refcount(3)
string(5) "hello" refcount(3)

Por qué refcount es 3 y no 2. Podría esperarse 2 (para $a y $b). El conteo adicional proviene de debug_zval_dump() en sí: pasar la variable a la función añade temporalmente un manejador más al zval, que se cuenta antes de imprimir el valor. Este desfase de uno es una peculiaridad conocida — lea el conteo impreso en relación con una línea base, no como una verdad absoluta.

Observando la copia en escritura

El uso más instructivo es observar cómo PHP comparte y luego separa un valor. Las variables simples (sin referencia) comparten un zval hasta que una de ellas es modificada:

<?php
$a = "hello";
debug_zval_dump($a);   // refcount(2): $a + the function argument

$b = $a;               // no copy yet — $a and $b share one zval
debug_zval_dump($a);   // refcount(3): $a, $b, and the argument

$b = "world";          // write triggers the copy ("copy-on-write")
debug_zval_dump($a);   // back to refcount(2): $b now has its own zval
?>

El refcount que sube al asignar y baja al modificar una copia es la copia en escritura en acción — PHP evitó duplicar el string "hello" hasta que realmente tuvo que hacerlo.

Conclusión

La función debug_zval_dump() fue históricamente útil para inspeccionar conteos de referencias y el comportamiento de copia en escritura del motor Zend. Imprime el tipo, el valor y el estado refcount/is_ref de una variable, lo que ayudaba a los desarrolladores a comprender cuándo PHP realmente copia los datos. Hoy en día es principalmente de interés educativo, ya que fue eliminada a partir de PHP 8+.

Alternativas modernas

Dado que debug_zval_dump() no está disponible en PHP 8+, utilice estas alternativas:

  • var_dump() — la opción estándar para inspeccionar el tipo y el valor de cualquier variable. Use esta para la depuración cotidiana.
  • print_r() — salida legible para arrays y objetos, opcionalmente devuelta como string.
  • var_export() — genera una representación de código PHP válido que puede pegarse de vuelta en el código fuente.
  • gettype() — cuando solo necesita el nombre del tipo de una variable.
  • xdebug_debug_zval() — el reemplazo más cercano para la inspección de refcount, disponible cuando la extensión Xdebug está instalada.

Práctica

Práctica
¿Qué hace la función debug_zval_dump() en PHP?
¿Qué hace la función debug_zval_dump() en PHP?
Was this page helpful?