Manipulaci贸n de Tipos

Manipulaci贸n de Tipos

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().

Nota: El comportamiento de una conversi贸n autom谩tica a matriz no se encuentra definido en el momento.

<?php
$a
= "1";     // $a es una cadena
$a[0] = "f";  // Que hay de las posiciones de cadena? Que sucede?
?>

Ya que PHP (por razones hist贸ricas) soporta el uso de 铆ndices en cadenas mediante desplazamientos de posici贸n usando la misma sintaxis que la indexaci贸n de matrices, el ejemplo anterior lleva a un problema: 驴deber铆a $a convertirse en una matriz con un primer elemento "f", o deber铆a "f" convertirse en el primer caracter de la cadena $a?

Las versiones recientes de PHP interpretan la segunda asignaci贸n como una identificaci贸n de desplazamiento de cadena, as铆 que $a se convierte en "f", sin embargo el resultado de esta conversi贸n autom谩tica debe considerarse indefinido. PHP 4 introdujo la nueva sintaxis de llaves para acceder a los caracteres de una cadena, use esta sintaxis en lugar de la que fue presentada anteriormente:

<?php
$a    
= "abc"; // $a es una cadena
$a{1} = "f";   // $a es ahora "afc"
?>

Vea la secci贸n llamada Acceso a cadenas por caracter para m谩s informaci贸n.

Moldeamiento de Tipos

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 moldeamiontos permitidos son:

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;
?>

Nota: 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 tambien 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: