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:

Hosting by: hurra.com
Generated: 2007-01-26 18:01:09