Tipos de datos en PHP
Aprende los ocho tipos de datos de PHP — int, float, bool, string, array, object, null y resource — con ejemplos, verificación de tipos y reglas de conversión.
Un tipo de dato describe qué clase de valor contiene una variable y qué operaciones son válidas sobre ella. PHP es de tipado dinámico: nunca se declara un tipo, simplemente se asigna un valor y PHP infiere el tipo a partir de él. La misma variable puede incluso cambiar de tipo durante la ejecución de un script. Entender los ocho tipos integrados — y cómo PHP convierte entre ellos — es la base para escribir código PHP predecible.
Este capítulo cubre todos los tipos de PHP, cómo inspeccionar el tipo de un valor en tiempo de ejecución y las reglas de conversión de tipos que confunden a la mayoría de los principiantes.
Los ocho tipos de datos de PHP
PHP tiene ocho tipos primitivos, agrupados en tres familias:
| Familia | Tipos |
|---|---|
| Escalar (valor único) | int, float, bool, string |
| Compuesto (colecciones) | array, object |
| Especial | null, resource |
Puedes preguntarle a PHP qué tipo tiene cualquier valor con la función gettype(), o comprobar un tipo específico con funciones como is_int(), is_string() o is_null().
<?php
$value = 42;
echo gettype($value); // integer
$value = "now I'm a string";
echo PHP_EOL . gettype($value); // stringTipos escalares
Los tipos escalares almacenan un único valor.
Integer
Un integer es un número entero, positivo o negativo, sin punto decimal. Más información en Números PHP.
<?php
$num = 42; // decimal
$negative = -7;
$hex = 0x1A; // hexadecimal (26)
$binary = 0b101; // binary (5)
echo "$num $negative $hex $binary"; // 42 -7 26 5Float
Un float (número de punto flotante) almacena un número con punto decimal o exponente. Ten en cuenta que los floats son aproximados, por lo que nunca deben compararse para comprobar igualdad exacta.
<?php
$price = 12.99;
$scientific = 1.2e3; // 1200
echo $price + $scientific; // 1212.99Boolean
Un boolean solo puede ser true o false. Es el tipo que producen las comparaciones y el que usan condiciones como if.
<?php
$isActive = true;
$hasError = false;
var_dump($isActive); // bool(true)String
Un string es una secuencia de caracteres. Las cadenas entre comillas dobles interpolan variables; las de comillas simples no. Consulta Cadenas PHP para más detalles.
<?php
$name = "John";
echo "Hello, $name!"; // Hello, John!
echo PHP_EOL . 'Hello, $name!'; // Hello, $name! (no interpolation)Tipos compuestos
Los tipos compuestos agrupan múltiples valores.
Array
Un array almacena un mapa ordenado de pares clave/valor en una sola variable. Usa la sintaxis corta [] en PHP moderno.
<?php
$fruits = ["apple", "banana", "cherry"];
$prices = ["apple" => 1.20, "banana" => 0.50]; // associative
echo $fruits[1]; // banana
echo PHP_EOL . $prices["apple"]; // 1.2Object
Un object es una instancia de una clase — agrupa datos (propiedades) con comportamiento (métodos). Se crea con la palabra clave new.
<?php
class Person {
public function __construct(public string $name) {}
public function greet(): string {
return "Hi, I'm {$this->name}";
}
}
$person = new Person("Ada");
echo $person->greet(); // Hi, I'm AdaTipos especiales
NULL
null representa una variable sin valor. Una variable es null si se le ha asignado la constante null, aún no ha sido definida o ha sido eliminada con unset(). Se comprueba con is_null() o === null.
<?php
$age = null;
var_dump(is_null($age)); // bool(true)Resource
Un resource es una variable especial que contiene una referencia a un objeto externo, como un archivo abierto o una conexión a base de datos. No se crean directamente — funciones como fopen() los devuelven. Los resources se liberan automáticamente cuando ya no se usan.
Conversión y casting de tipos
Dado que PHP es de tipado dinámico, convierte ("hace malabarismos con") los tipos automáticamente cuando una operación lo requiere. Por ejemplo, una cadena numérica se convierte en número en operaciones aritméticas:
<?php
$result = "5" + 3; // the string "5" is converted to int 5
echo $result; // 8Una cadena que solo comienza con dígitos (como "5 apples") genera una advertencia en PHP moderno, así que es preferible convertir de forma explícita con un cast.
Cuando necesitas control explícito, convierte un valor escribiendo el tipo destino entre paréntesis:
<?php
$text = "12.99";
$asFloat = (float) $text; // 12.99 as a float
$asInt = (int) $text; // 12 (truncated)
var_dump($asInt); // int(12)Presta atención a la veracidad: al convertir a bool, los valores 0, 0.0, "", "0", [] y null son todos false; casi todo lo demás es true.
<?php
var_dump((bool) "0"); // bool(false)
var_dump((bool) "0.0"); // bool(true) — surprising!Cuándo usar cada tipo
- Usa int/float para cantidades y cálculos; recurre a los helpers de Números PHP para formatear.
- Usa string para texto e identificadores.
- Usa bool para indicadores y resultados de comparaciones.
- Usa array para almacenar listas o mapas de valores relacionados.
- Usa object para modelar entidades del mundo real con datos y comportamiento.
- Usa null para indicar "sin valor aún" en lugar de un marcador ficticio como
0o"".
Resumen
PHP infiere automáticamente el tipo de un valor a partir de lo que se asigna y soporta ocho tipos distribuidos en las familias escalar, compuesta y especial. Inspecciona tipos con gettype() y las funciones is_*, y controla las conversiones con casts explícitos. Dominar la conversión de tipos — especialmente las reglas de bool y cadenas numéricas — previene toda una clase de errores sutiles. A continuación, descubre cómo interactúan los tipos con los operadores y cómo almacenarlos en variables.