PHP no requiere (ni soporta) la definición explicita de tipos en la declaración de variables; el tipo de la variable se determina por el contexto en el cual se emplea la variable. Es decir, si se asigna un valor string a una variable $var, entonces $var se convierte en un string. Si un valor integer es entonces asignado a la misma variable $var, ésta se convierte en integer.
Un ejemplo de la conversión de tipos automática de PHP es el operador suma '+'. Si ambos operandos son float, entonces ambos operandos son evaluados como floats y el resultado será un float. De otra manera, los operandos seran interpretados como integers, y el resultado será entonces integer. Tenga en cuenta que esto no implica que se cambien los tipos de los propios operandos; el único cambio es en como se evalúan los operandos y en el tipo de expresión en sí mismo.
<?php
$foo = "0"; // $foo es string (ASCII 48)
$foo += 2; // $foo es ahora un integer (2)
$foo = $foo + 1.3; // $foo es ahora un float (3.3)
$foo = 5 + "10 Cerditos pequeñitos"; // $foo es integer (15)
$foo = 5 + "10 Cerdos pequeños"; // $foo es integer (15)
?>
Si considera confusos los últimos dos ejemplos anteriores, consulte Conversión de cadenas a números.
Para forzar a que una variable sea evaluada como un determinado tipo, consulte la sección Forzado de tipos. Para cambiar el tipo de variable, consulte la función settype().
Para probar cualquiera de los ejemplos de esta sección, utilice la función var_dump().
Nota:
El comportamiento de la conversión automática en array está actualmente sin definir.
Tambien, debido a que PHP soporta el indexado de string mediante compensaciones mediante la misma sintaxis empleada en el indexado de arrays, los siguientes ejemplos son válidos para todas las versiones de PHP:
<?php
$a = 'car'; // $a es un string
$a[0] = 'b'; // $a sigue siendo un string
echo $a; // bar
?>Consulte la sección Acceso a cadenas mediante caracteres para más información.
El forzado de tipos en PHP funciona de la misma manera que en C:, donde el nombre del tipo deseado se escribe entre paréntesis antes de la variable que se quiera forzar.
<?php
$foo = 10; // $foo es un integer
$bar = (boolean) $foo; // $bar es un boolean
?>
Los siguientes forzados de tipos están permitidos:
El forzado (binary) y el soporte del prefijo b fueron añadidos en PHP 5.2.1
Fíjese que se permiten las tabulaciones y espacios dentro de los paréntesis, por lo que los siguientes ejemplos son funcionalmente equivalentes:
<?php
$foo = (int) $bar;
$foo = ( int ) $bar;
?>
Forzado literal de strings y variables a strings binarios:
<?php
$binary = (binary) $string;
$binary = b"binary string";
?>
Nota:
El lugar de forzar una variable a string, tambien se puede encerrar la variable entre comillas dobles.
<?php
$foo = 10; // $foo es un integer
$str = "$foo"; // $str es un string
$fst = (string) $foo; // $fst es tambien un string
// Esto muestra que "son lo mismo"
if ($fst === $str) {
echo "son lo mismo";
}
?>
Puede que no sea obvio que sucede exactamente cuando se fuerzan ciertos tipos. Para más información, consulte estas secciones: