Cambios de tipo de variable (malabares)
PHP no requiere (o no admite) especificar su tipo de variable en la variable declarada; el tipo de una variable está determinado por el contexto en el que se usa la variable, es decir, si asigna una cadena a una variable var El valor de var se convierte en una variable de cadena. Si asigna un número entero a var, se convierte en una variable entera.
Un ejemplo de PHP que convierte automáticamente tipos de variables es el operador de suma '+'. Si algún operando es doble, entonces todos los operandos se evalúan como dobles y el resultado también es doble. De lo contrario, los operandos se considerarán números enteros y el resultado será un número entero. Tenga en cuenta que esto no afecta el tipo de variable de cada operando en sí, el único cambio es cómo se procesan los operandos durante el cálculo.
$foo = "0"; // $foo es una cadena con un valor de "0" (ASCII 48)
$foo++; // $foo es una cadena con un valor de "1" (ASCII 49)
$foo += 1; // $foo ahora es un número entero (2)
$foo = $foo + 1.3; // $foo ahora es un número entero (3.3)
$foo = 5 + "10 Little Piggies"; (15)
$foo = 5 + "10 Cerditos"; // $foo es un número entero (15)
Si cree que las dos últimas expresiones del ejemplo anterior parecen un poco extrañas, consulte la sección "Conversión de cadenas".
Si desea forzar la evaluación de una variable como de tipo fijo, consulte la sección "Conversión". Si desea cambiar el tipo de una variable, consulte la descripción de la función "settype()".
Determinar el tipo de una variable.
Debido a que PHP determina los tipos de variables por sí mismo y generalmente las convierte según sea necesario, el tipo de una variable en particular no siempre es obvio. PHP incluye funciones para averiguar el tipo de esta variable. Estas funciones son gettype(), is_long(), is_double(), is_string(), is_array() e is_object().
tipo de fundición
La coerción de tipos en PHP es más o menos la misma que en el lenguaje C: escriba el tipo requerido entre paréntesis delante de la variable que se va a coaccionar.
$foo = 10; // $foo es un número entero
$bar = (doble) $foo // $bar es un doble;
Se permiten los siguientes métodos de coerción:
(int), (entero) – convertir a entero
(real), (doble), (flotante) – obligar a duplicar
(cadena) – coaccionar a cadena
(matriz) – coaccionar a la matriz
(objeto) – coaccionar para objetar
Tenga en cuenta que se permiten tabulaciones y espacios entre paréntesis, por lo que las siguientes declaraciones son equivalentes:
$foo = (int) $barra;
$foo = (int) $barra;
Conversión de cadenas
Cuando una cadena se evalúa como un valor numérico, su resultado y tipo se determinan como se describe a continuación.
Si esta cadena contiene los caracteres '.', 'e' o 'E', se trata como una variable de tipo doble; de lo contrario, se trata como un número entero.
El valor de esta cadena está determinado por el prefijo. Si la cadena comienza con datos numéricos válidos, entonces los datos numéricos son el valor en el que se evalúa la cadena. De lo contrario, el valor es cero. Los datos numéricos válidos siguen la siguiente notación, seguida de uno o más dígitos (que pueden incluir un punto decimal), seguido de un exponente opcional. El exponente está formado por uno o más dígitos seguidos de 'e' o 'E'.
$foo = 1 + "10.5"; // $foo es un doble (11.5)
$foo = 1 + "-1.3e3"; // $foo es un doble (-1299)
$foo = 1 + "bob -1.3 e3"; // $foo es un número entero (1)
$foo = 1 + "bob3"; // $foo es un número entero (1)
$foo = 1 + "10 Cerditos"; // $foo es un número entero ( 11)
$foo = 1 + "10 cerditos"; // $foo es un número entero (11);
// Esta cadena incluye el carácter 'e'.
Para obtener más información, consulte la sección del manual de Unix sobre strtod(3).