W3docs

get_defined_vars()

La función get_defined_vars() de PHP devuelve un array asociativo con todas las variables definidas en el ámbito actual.

Introducción

get_defined_vars() es una función integrada de PHP que devuelve un array asociativo de todas las variables que existen en el ámbito donde se llama. Las claves del array son los nombres de las variables (sin el $ inicial) y los valores son los valores actuales de esas variables.

La idea clave a recordar es el ámbito. Un "ámbito" es la región del código en la que una variable es visible. PHP tiene el ámbito de función (variables dentro de una función) y el ámbito global (variables en el nivel superior de un script). get_defined_vars() reporta únicamente lo que es visible en el punto exacto donde se llama, lo que lo convierte en una forma rápida de capturar el estado durante la depuración sin necesidad de nombrar cada variable manualmente.

Esta página cubre la sintaxis, lo que la función incluye y lo que no incluye, cómo cambia su resultado según el ámbito y los usos más comunes en el mundo real.

Sintaxis

get_defined_vars(): array

La función no acepta ningún argumento y siempre devuelve un array. Si no hay variables definidas en el ámbito actual, devuelve un array vacío.

Ejemplo básico

El caso más sencillo es llamarla en el ámbito global, justo después de definir algunas variables:

<?php
$name = "Ada";
$age = 36;
$colors = ["red", "green"];

print_r(get_defined_vars());
?>

Las variables definidas por el usuario aparecen como claves (junto con las superglobales de PHP, explicadas a continuación):

Array
(
    [name] => Ada
    [age] => 36
    [colors] => Array
        (
            [0] => red
            [1] => green
        )
    ...
)

El ámbito importa: local vs. global

Esta es la parte que confunde a la gente. get_defined_vars() no atraviesa los límites del ámbito. Una función no puede ver las variables globales del script a menos que se hayan importado (por ejemplo, con la palabra clave global o pasándolas como argumentos), por lo que llamar a get_defined_vars() dentro de una función reporta únicamente las variables propias de esa función.

php— editable, runs on the server

Dentro de la función, solo la variable local es visible, por lo que la salida es simplemente:

Array
(
    [var3] => 1
)

Las variables globales $var1 y $var2 no aparecen en la lista, porque pertenecen a un ámbito diferente. (true se imprime como 1 porque PHP representa el boolean true de esa manera en print_r.)

¿Qué pasa con las superglobales?

Un error frecuente es pensar que get_defined_vars() siempre devuelve las superglobales ($_GET, $_POST, $_SERVER, etc.). No es así. Las superglobales solo se devuelven cuando se llama a la función en el ámbito global, porque allí es donde residen. Dentro de una función son accesibles por nombre, pero no forman parte de ese ámbito local, por lo que no aparecen en el resultado anterior. La misma regla se aplica a $GLOBALS: no se incluye en el array devuelto.

Casos de uso comunes

Comprobar si una variable está definida

Como el resultado es un array simple, puedes comprobar la existencia de una variable con array_key_exists(). Esto es útil cuando una variable puede haberse establecido solo en algunos caminos del código:

<?php
$config = "loaded";

$vars = get_defined_vars();

var_dump(array_key_exists("config", $vars));   // bool(true)
var_dump(array_key_exists("missing", $vars));  // bool(false)
?>

Para comprobar una única variable conocida, isset() suele ser más claro; get_defined_vars() destaca cuando quieres ver el panorama completo de una sola vez.

Depurar el estado dentro de una función

Inserta una sola llamada cerca de una línea complicada para ver todas las variables locales y sus valores, en lugar de escribir un var_dump() para cada una:

<?php
function calculatePrice($base, $taxRate) {
  $tax = $base * $taxRate;
  $total = $base + $tax;

  print_r(get_defined_vars());
  return $total;
}

calculatePrice(100, 0.2);
?>

La instantánea muestra los argumentos y cada variable local a lo largo del camino:

Array
(
    [base] => 100
    [taxRate] => 0.2
    [tax] => 20
    [total] => 120
)

Funciones relacionadas

FunciónÚsala cuando quieras…
compact()Construir un array a partir de nombres de variables seleccionados.
extract()Hacer lo contrario: convertir las claves de un array en variables.
isset()Comprobar si una variable específica está definida y no es null.

Consulta también Ámbito de variables para conocer las reglas que rigen lo que get_defined_vars() puede ver, y Superglobales de PHP para entender por qué solo aparecen en el ámbito global.

Conclusión

get_defined_vars() te proporciona una instantánea en una sola línea de todas las variables visibles en el ámbito actual, lo que la convierte en una ayuda rápida para la depuración y una manera sencilla de inspeccionar o probar el estado de forma programática. La única regla a tener en cuenta es el ámbito: dentro de una función solo verás las variables locales de esa función (más las importadas explícitamente), mientras que en el ámbito global también verás las superglobales de PHP. Conocer ese límite es lo que hace que la función sea predecible.

Práctica

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