Variables, tipos y operadores parecen la parte aburrida de aprender un lenguaje, pero es donde nacen la mayoría de los errores difíciles de encontrar. PHP ha cambiado mucho en sus últimas versiones, y muchos tutoriales todavía enseñan hábitos de hace quince años. En el libro PHP desde cero hasta experto los fundamentos se explican desde cero; aquí tienes un resumen con la mirada puesta en PHP 8.
Variables y tipado dinámico
En PHP las variables empiezan con $ y no se declara su tipo: lo toman del valor que
contienen, y puede cambiar.
<?php
$nombre = 'Ana'; // string
$edad = 31; // int
$altura = 1.68; // float
$activa = true; // bool
$telefono = null; // null: "sin valor"
var_dump($edad); // int(31)
echo gettype($altura); // double
$edad = 'treinta y uno'; // válido: ahora es string (y probablemente un bug)
var_dump() es tu mejor amigo al depurar: muestra el tipo y el valor exactos.
Los tipos de datos de PHP
| Tipo | Ejemplo | Uso típico |
|---|---|---|
int | 42 | Contadores, ids, cantidades |
float | 3.14 | Medidas. No para dinero: usa enteros en centavos o DECIMAL en la base de datos |
string | 'hola' | Texto |
bool | true | Banderas, condiciones |
array | ['a' => 1] | Listas y diccionarios |
null | null | Ausencia de valor |
object | new DateTime() | Instancias de clases |
Comillas simples o dobles
<?php
$nombre = 'Ana';
echo 'Hola $nombre'; // Hola $nombre (literal)
echo "Hola $nombre"; // Hola Ana (interpola variables)
echo "Hola {$user['nombre']}"; // llaves para arrays y propiedades
echo 'Hola ' . $nombre; // el punto concatena
Comparación: == vs ===
== compara valores después de convertir los tipos; === exige que también
coincida el tipo. La conversión automática produce resultados sorprendentes:
<?php
var_dump(0 == ''); // false en PHP 8 (¡era true en PHP 7!)
var_dump('1' == '01'); // true: compara como números
var_dump('10' == '1e1'); // true: ambos valen 10
var_dump(100 == '1e2'); // true
var_dump(null == false); // true
var_dump('1' === '01'); // false
var_dump(null === false); // false
=== y !== por defecto. Reserva == para los casos en que
quieras la conversión a propósito, que son muy pocos. Lo mismo con in_array(): pasa
true como tercer argumento para que compare de forma estricta.
Operadores modernos que debes usar
<?php
// ?? (null coalescing): valor por defecto si no existe o es null
$pagina = $_GET['pagina'] ?? 1;
// ??= asigna solo si la variable es null o no existe
$config['idioma'] ??= 'es';
// ?-> (nullsafe, PHP 8): no falla si el objeto es null
$ciudad = $usuario?->getDireccion()?->ciudad;
// <=> (nave espacial): -1, 0 o 1; ideal para ordenar
usort($productos, fn($a, $b) => $a['precio'] <=> $b['precio']);
// ... (spread): desempaquetar arrays
$base = ['html', 'css'];
$stack = [...$base, 'php', 'mysql']; // ['html', 'css', 'php', 'mysql']
// ** potencia e intdiv división entera
echo 2 ** 10; // 1024
echo intdiv(17, 5); // 3
strict_types: tipos que se cumplen
Por defecto, si una función espera un int y le pasas "5", PHP lo convierte
sin avisar. Con declare(strict_types=1) en la primera línea del archivo, esa llamada lanza
un TypeError, y el error aparece donde se produce y no tres funciones después.
<?php
declare(strict_types=1);
function duplicar(int $n): int
{
return $n * 2;
}
echo duplicar(5); // 10
echo duplicar('5'); // TypeError: debe ser int, se recibió string
Los datos de formularios siempre llegan como string, así que conviértelos y valídalos
explícitamente (por ejemplo, con filter_var($valor, FILTER_VALIDATE_INT)) antes de pasarlos
a tus funciones. Profundizamos en los tipos de parámetros en
funciones en PHP.
Errores comunes
- Comparar con
==contraseñas, tokens o hashes: usahash_equals()opassword_verify(). - Usar
floatpara dinero:0.1 + 0.2no es exactamente0.3. - Confundir
empty()con “no existe”:empty('0')estrue. Si el usuario escribe un 0,empty()lo tratará como vacío. - Variables sin inicializar: en PHP 8, leer una variable o clave que no existe genera
un aviso. Inicializa o usa
??.
Fundamentos sólidos desde el principio
El libro PHP desde cero hasta experto explica variables, tipos de datos, operadores y estructuras de control con ejemplos pensados para principiantes absolutos.
Comprar en Amazon