PHP es conocido como un lenguaje de tipado dinámico. El tipo de una variable en PHP cambia dinámicamente. Esta característica se llama «Type Juggling» en PHP.

En C, C++ y Java, debe declarar la variable y su tipo antes de usarla en el código posterior. La variable puede tomar un valor que coincida solo con el tipo declarado.

La declaración de tipo explícito de una variable no es necesaria ni soportada en PHP. Por lo tanto, el tipo de variable PHP se decide por el valor que se le asigna, y no al revés. Además, cuando a una variable se le asigna un valor de tipo diferente, su tipo también cambia.

Ejemplo 1

Observa la siguiente asignación de variables en PHP.

<?php
   $var = "Hello";
   echo "The variable $var is of " . gettype($var) . " type" .PHP_EOL;

   $var = 10;
   echo "The variable $var is of " . gettype($var) . " type" .PHP_EOL;

   $var = true;
   echo "The variable $var is of " . gettype($var) . " type" .PHP_EOL;

   $var = [1,2,3,4];
   echo "The variable $var is of " . gettype($var) . " type" .PHP_EOL;
?>

Producirá el siguiente resultado:

The variable $var is of string type
The variable $var is of integer type
The variable $var is of boolean type
The variable $var is of array type

Puede ver que el tipo de «$var» cambia dinámicamente según el valor que se le asigne. Esta característica de PHP se denomina «Type Juggling».

Ejemplo 2

Los Type Juggling también tienen lugar durante el cálculo de la expresión. En este ejemplo, una variable de cadena que contiene dígitos se convierte automáticamente en entero para la evaluación de la expresión de suma.

<?php
   $var1=100;
   $var2="100";
   $var3=$var1+$var2;
   var_dump($var3);
?>

Aquí está su resultado:

int(200)

Ejemplo 3

Si una cadena comienza con dígitos, los caracteres no numéricos finales, si los hay, se omiten al realizar el cálculo. Sin embargo, el analizador PHP emite un aviso como se muestra a continuación:

<?php
   $var1=100;
   $var2="100 days";
   $var3=$var1+$var2;
   var_dump($var3);
?>

Obtendrá el siguiente resultado:

int(200)

PHP Warning:  A non-numeric value encountered in /home/cg/root/53040/main.php on line 4

Fundición de tipos vs Type Juggling

Tenga en cuenta que la «conversión de tipos» en PHP es un poco diferente de la «conversión de tipos».

  • En el Type Juggling, PHP convierte automáticamente los tipos de uno a otro cuando es necesario. Por ejemplo, si se asigna un valor entero a una variable, se convierte en un entero.
  • Por otro lado, la conversión de tipos tiene lugar cuando el usuario define explícitamente el tipo de datos en el que desea convertir.

Ejemplo

La conversión de tipos obliga a que una variable se utilice como un tipo determinado. El siguiente script muestra un ejemplo de operadores de conversión de diferentes tipos:

<?php
   $var1=100;
   $var2=(boolean)$var1;
   $var3=(string)$var1;
   $var4=(array)$var1;
   $var5=(object)$var1;
   var_dump($var2, $var3, $var4, $var5);
?>

Producirá el siguiente resultado:

bool(true)
string(3) "100"
array(1) {
  [0]=>
  int(100)
}
object(stdClass)#1 (1) {
  ["scalar"]=>
  int(100)
}

Ejemplo

La conversión de una variable a una cadena también se puede hacer encerrando una cadena entre comillas dobles:

<?php
   $var1=100.50;
   $var2=(string)$var1;
   $var3="$var1";
   var_dump($var2, $var3);
?>

Aquí, obtendrá el siguiente resultado:

string(5) "100.5"
string(5) "100.5"