Una variable en PHP es un nombre que empieza por $, y se crea asignándole un valor: $name = "Ada";. No hay palabra clave de declaración ni tipo que indicar, porque el valor decide el tipo. Más adelante puedes asignarle un valor de otro tipo.
Reglas para nombrar variables
El nombre de una variable empieza por $, luego una letra o un guion bajo, y después cualquier combinación de letras, dígitos o guiones bajos. Las letras no ASCII cuentan como letras, así que $名前 es válido, aunque lo normal son nombres ASCII. Los nombres distinguen mayúsculas y minúsculas.
| Nombre | ¿Válido? |
|---|---|
$total, $userName, $user_name | sí |
$_count, $item2 | sí |
$2items | no, no puede empezar por un dígito |
$user-name | no, eso es $user menos name |
$this | no, está reservado para el objeto actual; asignarle algo es un error fatal |
Así que $city, $City y $CITY son tres variables distintas. Usa snake_case ($first_name) o camelCase ($firstName), y mantén un solo estilo por proyecto. Los estándares PSR dejan abierto a propósito el nombre de las variables; el código de Laravel y Symfony usa mayoritariamente camelCase.
Usar variables en cadenas
Dentro de comillas dobles PHP sustituye las variables por sus valores; dentro de comillas simples, no. Envuelve la variable entre llaves cuando le siguen letras directamente o cuando accedes a un elemento de array con una clave de texto:
La página de cadenas explica en detalle las comillas, la concatenación y la interpolación.
Variables no definidas y valores por defecto
Leer una variable a la que nunca se le asignó nada da null, y tu PHP imprime un warning:
Warning: Undefined variable $discount in /home/index.php on line 3
Compruébala antes con isset, o usa el operador de fusión de null ?? para dar un valor por defecto. Ninguno de los dos produce un warning:
$x ??= 0; es la forma corta de $x = $x ?? 0;. Los valores de formularios y de la URL son el caso habitual: $page = $_GET['page'] ?? 1;.
Ámbito de las variables en funciones
Las variables definidas fuera de una función no son visibles dentro de ella, y las variables creadas dentro de una función desaparecen cuando esta termina. Es la sorpresa más común para quien viene de JavaScript:
Sin el ?? 0, la primera función daría un warning por $taxRate no definida. Pasar los valores como parámetros mantiene las funciones predecibles y fáciles de probar, y es lo primero que deberías usar. La página de funciones explica los parámetros y los valores de retorno.
La palabra clave global y $GLOBALS
Cuando una función realmente necesita usar una variable global, decláralo con global, o accede a través del array $GLOBALS, que contiene todas las variables globales por su nombre:
Las globales hacen el código más difícil de seguir, porque cualquier función puede modificarlas. Aparecen en código antiguo y en plugins de WordPress (global $wpdb;); en código nuevo, pasa los valores o usa una clase.
Las variables static conservan su valor
Una variable static dentro de una función se crea una vez y conserva su valor entre llamadas. Sigue siendo local: el código de fuera de la función no puede verla.
Variables variables ($$name)
$$name usa el valor de $name como nombre de otra variable. Funciona, pero casi siempre un array hace lo mismo con más claridad:
<?php
$field = "color";
$$field = "blue"; // creates $color
echo $color, "\n";
// The clearer way to have names chosen at runtime:
$settings = [];
$settings[$field] = "blue";
echo $settings["color"], "\n";
Copia o referencia
Asignar una variable a otra copia el valor, arrays incluidos. Pon & delante para que los dos nombres apunten al mismo valor:
Los objetos se comportan de otra forma: asignar un objeto copia un manejador al mismo objeto, así que los cambios hechos a través de una variable se ven a través de la otra. Usa clone para obtener una copia real.
Error frecuente: una variable definida dentro de un if o de un bucle
PHP no tiene ámbito de bloque, así que una variable creada dentro de if, for o foreach sigue existiendo después. Eso ayuda, pero esconde un bug: cuando el bloque no se ejecuta, la variable nunca se creó.
Sin la línea del valor por defecto, un $orders vacío dejaría $message sin definir e imprimiría un warning. Da a cada variable un valor antes del bloque que podría asignarlo.
Preguntas frecuentes
¿Cómo se declara una variable en PHP?
Asigna un valor a un nombre que empiece por $: $count = 10;. PHP no tiene palabra clave var ni let ni tipo en la declaración; la variable se crea con la primera asignación y toma el tipo de su valor.
¿Por qué mi función no ve una variable definida fuera de ella?
Las funciones de PHP tienen su propio ámbito local y no ven las variables globales automáticamente. Pasa el valor como parámetro (la opción limpia), declara global $name; dentro de la función o lee $GLOBALS['name']. Los closures pueden capturarla con use ($name), y las funciones flecha fn() la capturan automáticamente.
¿Qué es una variable static en PHP?
Una variable local declarada con static dentro de una función, como static $calls = 0;. Se inicializa una sola vez y conserva su valor entre llamadas a esa función, algo útil para contadores y cachés sencillas.
¿Los nombres de variables en PHP distinguen mayúsculas y minúsculas?
Sí. $name, $Name y $NAME son tres variables distintas. En cambio, los nombres de funciones y de clases no distinguen mayúsculas y minúsculas en PHP.
¿Cómo elimino una variable en PHP?
Llama a unset($name);. Después, isset($name) es false y leerla da un warning "Undefined variable". Asignar null mantiene la variable pero la vacía.