Todo valor en PHP tiene un tipo: es texto, es un número entero, es un decimal, es verdadero o falso, o no tiene valor. El tipo decide qué puedes hacer con él: sumar dos números tiene sentido; sumar dos nombres, no.

Los cinco tipos simples

TipoQué guardaEjemplosvar_dump muestra
stringTexto, entre comillas"Ana", 'Punta Arenas', "42"string(3) "Ana"
intNúmero entero20, -3, 0int(20)
floatNúmero con decimales (con punto)5.8, 0.19, -1.5float(5.8)
boolVerdadero o falsotrue, falsebool(true)
nullAusencia de valornullNULL

Hay dos tipos más que se ven después: el arreglo (array, una lista de valores, en la Parte 5) y el objeto (lo que devuelve la conexión a la base de datos, en la Unidad 3).

Incorrecto: un número entre comillas, o con coma decimal

<?php
$edad = "20";
$promedio = 5,8;

"20" es texto que se ve como número. 5,8 es un error de sintaxis: en PHP la coma separa valores, no decimales.

Correcto

<?php
$edad = 20;
$promedio = 5.8;

PHP convierte tipos sin avisar

Si mezclas tipos en una operación, PHP convierte uno de ellos para poder operar. Es cómodo, pero hay que saber predecirlo.

<?php
var_dump("5" + 3);
var_dump("5" . 3);
var_dump("2.5" * 2);
var_dump(7 / 2);
var_dump(6 / 2);
int(8)
string(2) "53"
float(5)
float(3.5)
int(3)
OperaciónQué hace PHPResultado
"5" + 3El + es de números: convierte "5" en 5int(8)
"5" . 3El . es de texto: convierte 3 en "3"string "53"
"2.5" * 2Convierte el texto en 2.5float(5)
7 / 2La división no exacta da decimalfloat(3.5)
6 / 2La división exacta da enteroint(3)

Por qué esto importa desde la Parte 6

Todo lo que llega desde un formulario llega como texto. Si el usuario escribe 20 en el campo edad, PHP recibe "20". Gracias a la conversión automática, "20" + 1 da 21; pero para validar que realmente sea un número tendrás que revisarlo tú.

Cuando el texto no es un número

<?php
echo "5 manzanas" + 1;
echo "\n";
echo "manzanas" + 1;
PHP Warning:  A non-numeric value encountered in /home/ana/prueba.php on line 2
6
PHP Fatal error:  Uncaught TypeError: Unsupported operand types: string + int in /home/ana/prueba.php:4

Si el texto empieza con un número, PHP usa ese número y avisa con un Warning. Si no tiene ningún número al inicio, es un Fatal error.

Convertir a mano

Para convertir un valor a un tipo, se escribe el tipo entre paréntesis antes del valor. Se llama casting.

<?php
var_dump((int) "42");
var_dump((int) 7.9);
var_dump((float) "5.8");
var_dump((string) 2026);
var_dump((int) "abc");
int(42)
int(7)
float(5.8)
string(4) "2026"
int(0)

Incorrecto: (int) para redondear

(int) 7.9 da 7: corta los decimales, no redondea. Para redondear se usa round(), en Operadores.

Incorrecto: convertir sin revisar

(int) "abc" da 0 sin ningún aviso. Si conviertes lo que escribió un usuario sin revisarlo, un texto cualquiera se transforma en un 0 válido.

Correcto: preguntar antes de convertir

<?php
$edadTexto = "20";
 
if (is_numeric($edadTexto)) {
    $edad = (int) $edadTexto;
    echo "Edad válida: $edad\n";
} else {
    echo "La edad no es un número\n";
}
Edad válida: 20

El if se ve en detalle en la Parte 3.

Funciones para preguntar por el tipo

Todas devuelven true o false.

FunciónPreguntatrue con
is_numeric($x)¿Es un número, o un texto que se puede leer como número?12, "12", "5.8"
is_int($x)¿Es de tipo entero?12 (pero no "12")
is_float($x)¿Es de tipo decimal?5.8
is_string($x)¿Es texto?"Ana", "12"
is_bool($x)¿Es true o false?false
is_null($x)¿Es null?null

Valores que cuentan como falso

En una condición, PHP convierte cualquier valor a bool. Estos siete valores se convierten en false; todo lo demás es true.

ValorTipo¿Cuenta como falso?
falseboolSí
0intSí
0.0floatSí
""string vacíoSí
"0"stringSí (la trampa)
nullnullSí
[]arreglo vacíoSí
" "string con un espacioNo
"0.0"stringNo
"false"stringNo: es un texto con cinco letras

Incorrecto: tratar "0" como si no hubiera dato

Si alguien escribe 0 en un campo “cantidad de hijos”, PHP recibe "0", y "0" cuenta como falso. Un if ($hijos) lo trataría como si el campo estuviera vacío. Este caso vuelve en Validar en el servidor.

Los decimales no son exactos

<?php
var_dump(0.1 + 0.2);
var_dump(0.1 + 0.2 == 0.3);
float(0.30000000000000004)
bool(false)

Pasa en todos los lenguajes (también en C): los decimales se guardan en binario y algunos no tienen representación exacta. Para mostrarlos se redondean (round(0.1 + 0.2, 2) da 0.3), y los precios en pesos se guardan como enteros.

Pruébalo

  • Haz var_dump de "5" + 3 y de "5" . 3, y explica la diferencia antes de ejecutar
  • Convierte "12", "12.7" y "doce" a int y mira qué da cada uno
  • Revisa con is_numeric() los mismos tres valores
  • Error provocado: escribe $promedio = 5,8; y lee el error
  • Error provocado: suma "hola" + 1 y lee el tipo de error

Errores comunes

SíntomaCausaSolución
syntax error, unexpected token ","Escribiste un decimal con coma: 5,8Usa punto: 5.8
Un número se pega a otro ("53" en vez de 8)Usaste . en vez de +. une texto, + suma
A non-numeric value encounteredOperaste con un texto que no es solo númeroRevisa con is_numeric() antes de operar
Unsupported operand types: string + intOperaste con un texto que no empieza con númeroValida el dato; no conviertas a ciegas
(int) da un número menor al esperadoEl casting corta los decimalesUsa round()

Checkpoint

Intenta responder antes de desplegar cada pregunta.