PHP no requiere (o soporta) la definición explícita de tipos en la declaración de variables; el tipo de una variable es determinado por el contexto en el que la variable es usada. Lo que quiere decir que si asigna un valor de cadena a la variable $var , $var se convierte en una cadena. Si luego asigna un valor entero a $var , ésta se convierte en entera.
Un ejemplo de la conversión automática de tipos de PHP es el operador de adición '+'. Si cualquiera de los operandos es un flotante, entonces todos los operandos son evaluados como flotantes, y el resultado será un flotante. De otro modo, los operandos serán interpretados como enteros, y el resultado será también un entero. Note que este NO modifica los tipos de los operandos mismos; el único cambio está en la forma como los operandos son evaluados.
<?php
$foo = "0"; // $foo es una cadena (ASCII 48)
$foo += 2; // $foo es ahora un entero (2)
$foo = $foo + 1.3; // $foo es ahora un flotante (3.3)
$foo = 5 + "10 Cerditos"; // $foo es entero (15)
$foo = 5 + "10 Cerdos"; // $foo es entero (15)
?>
Si los dos últimos ejemplos lucen extraños, consulte Conversión de cadenas a números.
Si desea forzar que una variable sea evaluada como un cierto tipo, consulte la sección sobre Moldeamiento de tipos. Si desea cambiar el tipo de una variable, vea settype().
Si quisiera probar cualquiera de los ejemplos en esta sección, puede usar la función var_dump().
Note: El comportamiento de una conversión automática a matriz no se encuentra definido en el momento.
Asimismo, ya que PHP soporta el uso de índices en cadenas por medio de desplazamientos usando la misma sintaxis que la indexación de matrices, el siguiente ejemplo permanece válido para todas las versiones de PHP:<?php
$a = 'carro'; // $a es una cadena
$a[0] = 'b'; // $a sigue siendo una cadena
echo $a; // barro
?>
Vea la sección titulada Acceso a cadenas por caracter para más información.
El moldeamiento de tipos en PHP funciona de forma muy similar a como ocurre en C: el nombre del tipo deseado es escrito entre paréntesis antes de la variable que debe ser moldeada.
<?php
$foo = 10; // $foo es un entero
$bar = (boolean) $foo; // $bar es un booleano
?>
Los moldeamientos permitidos son:
El moldeamiento (binary) y el soporte del prefijo b fueron agregados en PHP 5.2.1
Note que las tabulaciones y los espacios son permitidos al interior de los paréntesis, así que las siguientes expresiones son funcionalmente equivalentes:
<?php
$foo = (int) $bar;
$foo = ( int ) $bar;
?>
Moldeamiento de cadenas literales y variables a cadenas binarias:
<?php
$binario = (binary)$cadena;
$binario = b"cadena binaria";
?>
Note: En lugar de moldear una variable a cadena, puede también rodear la variable de comillas dobles.
<?php
$foo = 10; // $foo es un entero
$cad = "$foo"; // $cad es una cadena
$fst = (string) $foo; // $fst es también una cadena
// Esto imprime "son lo mismo"
if ($fst === $cad) {
echo "son lo mismo";
}
?>
Puede que no sea obvio qué sucede exactamente cuando se moldea entre ciertos tipos. Para más información, consulte las secciones: