PHP básico

Variables, tipos y texto

Lección 2 de 8 · 14 min

La página que saluda por tu nombre

Terminas una compra y la pantalla dice: «Listo, Ana. Tu pedido por $84.500 llegará el viernes». Esa frase no está escrita en ningún archivo. Está escrita con huecos, y el servidor rellena los huecos con los datos de quien compró.

Cada hueco es una variable: un nombre que le pones a un dato para poder usarlo más adelante sin repetirlo.

Guardar un dato y mostrarlo
<?php
$nombre = 'Ana';
$total  = 84500;

echo 'Listo, ';
echo $nombre;
Resultado
Listo, Ana

El signo = no significa «es igual a»: significa «guarda esto aquí». Se lee de derecha a izquierda. Y a partir de esa línea, cada vez que escribas $nombre, PHP pone Ana en su lugar.

El nombre de una variable distingue mayúsculas de minúsculas. $nombre, $Nombre y $NOMBRE son tres variables distintas, y PHP no te avisa: simplemente la que escribiste mal está vacía.

Empieza siempre con $, sigue con una letra o un guión bajo, y no lleva espacios ni tildes. Escoge un estilo -$totalPedido o $total_pedido- y no lo mezcles.

Los cinco tipos que se usan todos los días

string: texto

Va entre comillas: 'Ana', 'CC-1053'.

Un número entre comillas también es texto. El teléfono y la cédula se guardan como texto: nunca vas a sumarlos, y guardarlos como número borra el cero de la izquierda.

int y float: números

84500 es entero y 19.5 es decimal.

Van sin comillas, sin puntos de miles y con punto decimal, no con coma. Los separadores son para mostrar, no para calcular.

bool: sí o no

Solo dos valores: true y false.

Es el tipo de las preguntas: ¿el pedido está pagado?, ¿el usuario es administrador? Sobre esto se construye toda la lección 3.

null: no hay dato

null significa vacío de verdad: aquí no hay nada.

No es lo mismo que 0 ni que el texto vacío. «No dejó teléfono» y «su teléfono es 0» son cosas distintas.

Ver qué tienes de verdad

Cuando algo no cuadra, no adivines el contenido de una variable: pregúntaselo a PHP. var_dump() muestra el valor y su tipo, que suele ser justo el dato que falta.

var_dump dice el tipo, echo no
<?php
$cantidad = 3;
$precio   = 19.5;
$activo   = true;
$telefono = '3001234567';

var_dump($cantidad, $precio, $activo, $telefono);
Resultado
int(3)
float(19.5)
bool(true)
string(10) "3001234567"

Fíjate en la última línea: string(10). El teléfono es texto de diez caracteres, no un número. Y eso es exactamente lo que queremos.

Las dos comillas de PHP, que no son intercambiables

Aquí está la primera trampa de verdad del lenguaje, y conviene aprenderla hoy porque produce un error que no da error: la página sale, pero dice una cosa rara.

En PHP, las comillas dobles miran dentro del texto y sustituyen las variables por su valor. Las comillas simples no miran nada: imprimen exactamente lo que hay escrito.

La misma línea, con las dos comillas
<?php
$nombre = 'Ana';

echo "Hola, $nombre";
echo "\n";
echo 'Hola, $nombre';
Resultado
Hola, Ana
Hola, $nombre

Esa segunda línea es la que aparece publicada en internet más veces de lo que parece. No hay error, no hay aviso: PHP hizo exactamente lo que se le pidió.

Regla práctica: comillas simples por defecto -son más rápidas de leer y no esconden sorpresas- y comillas dobles solo cuando quieras meter una variable dentro del texto.

Cuando el nombre se pega a otra letra

Dentro de comillas dobles, PHP toma como nombre de la variable todas las letras que siguen al $. Si escribes "Van $cantidadunidades", PHP busca una variable llamada $cantidadunidades, no la encuentra y te deja un hueco.

La solución son las llaves, que marcan dónde termina el nombre:

Llaves para separar la variable del texto
<?php
$cantidad = 3;

echo "Van {$cantidad}unidades";
Resultado
Van 3unidades

En tutoriales viejos verás ${nombre}, con el dólar fuera de las llaves. Esa forma está deprecada desde PHP 8.2 y la propia documentación oficial recomienda usar {$nombre} en su lugar. Deprecado quiere decir que todavía funciona, avisa, y en alguna versión futura dejará de funcionar.

Es un buen ejemplo de por qué se contrasta con la documentación oficial y no con el primer resultado de una búsqueda.

Pegar textos: el punto

La otra forma de armar una frase es unir trozos con un punto. En PHP el + es solo para sumar números; para pegar texto se usa ., y esa es una diferencia que arrastra quien viene de otros lenguajes.

Concatenar, y añadir al final
<?php
$nombre = 'Ana';
$total  = 84500;

$mensaje = 'Listo, ' . $nombre . '. Total: $' . number_format($total, 0, ',', '.');
echo $mensaje;

$mensaje .= ' Gracias por tu compra.';
echo "\n" . $mensaje;
Resultado
Listo, Ana. Total: $84.500
Listo, Ana. Total: $84.500 Gracias por tu compra.

Dos cosas de esa línea. .= significa «añade esto al final de lo que ya había», y ahorra escribir $mensaje = $mensaje . ....

Y number_format() es la respuesta a la pregunta que ya te estabas haciendo: el número se guarda pelado y se muestra con sus separadores. Los tres argumentos son cuántos decimales, qué carácter usar para los decimales y cuál para los miles: en Colombia, coma y punto.

Lo que suele pasar la primera semana

Escribí un precio con coma y salió otra cosa

$precio = 19,5; no es un decimal para PHP: la coma separa argumentos. Se escribe 19.5, con punto, siempre.

La coma decimal es una convención para mostrar, y de eso se encarga number_format() al final.

¿Qué pasa si sumo un texto con un número?

Depende de si ese texto parece un número. "5" + 2 da 7: PHP convierte la cadena numérica.

Pero desde PHP 8.0, si el texto no tiene nada de número -"abc" + 2- se lanza un TypeError y el programa se detiene. Y algo como "10 cajas" + 2 da 12 con un aviso. Antes de PHP 8 todo esto pasaba en silencio, que es como se colaban los errores de cálculo.

¿Y si un dato no debe cambiar nunca?

Eso es una constante: const IVA = 0.19; o define('IVA', 0.19);. Se escribe sin $, por convención en mayúsculas, y si intentas reasignarla PHP protesta.

Sirve para lo que es una regla y no un dato: el IVA, el nombre del sitio, la ruta de las imágenes.

Me sale «Undefined variable»

Estás usando una variable que no existe todavía: casi siempre es un nombre mal escrito o una mayúscula de más. PHP lo avisa y sigue, dejando el hueco vacío.

Léelo siempre: ese aviso es la pista, no una molestia. Y en un sitio publicado los avisos no se muestran al visitante, se escriben en un archivo de registro.

Cada dato con su tipo

Arrastra el tipo que le corresponde a cada dato, o toca el tipo y luego su espacio.

  1. El número de cédula 1053792 tal como se guarda para imprimirlo en una factura, sin perder ceros a la izquierda.
  2. Las 3 unidades que el cliente puso en el carrito y que hay que multiplicar por el precio.
  3. El 0.19 del IVA, que tiene decimales.
  4. La respuesta a «¿este pedido ya está pagado?».
  5. El teléfono de un cliente que no dejó ninguno: no es cero, es que no hay dato.

Compruébalo tú mismo

Tienes $ciudad = 'Bogotá'; y escribes echo 'Envío a $ciudad'; con comillas simples. ¿Qué sale en pantalla?

¿Por qué el teléfono de un cliente se guarda como texto y no como número?

En un tutorial encuentras "Hola ${nombre}". ¿Qué haces?

Lo que sigue

Ya puedes guardar datos y mostrarlos. Pero una página útil no muestra siempre lo mismo: cambia según el dato. En la siguiente lección la página empieza a decidir -mostrar «agotado» o el botón de comprar- y a repetir sin que tú escribas cien veces lo mismo.

Siguiente: Decidir y repetir

Continuar ← Qué es PHP y dónde se ejecuta