Actualizado el jueves, 2 mayo, 2024

El término «Type Casting» se refiere a la conversión de un tipo de datos a otro. Dado que PHP es un lenguaje de tipos débiles, el analizador coacciona ciertos tipos de datos en otros mientras realiza ciertas operaciones. Por ejemplo, una cadena que tiene dígitos se convierte en entero si es uno de los operandos implicados en la operación de suma.

Conversión de tipos implícitos

A continuación, se muestra un ejemplo de conversión de tipos coercitiva o implícita:

<?php
   $a = 10;
   $b = '20';
   $c = $a+$b;
   echo "c = " . $c;
?>

En este caso, $b es una variable de cadena, convertida en un entero para permitir la adición. Producirá el siguiente resultado:

c = 30

Pongamos otro ejemplo. Aquí, una variable entera $a se convierte en una cadena para que se concatene con una variable de cadena.

<?php
   $a = 10;
   $b = '20';
   $c = $a.$b;
   echo "c = " . $c;
?>

Producirá el siguiente resultado:

c = 1020

Además de esta conversión de tipos coercitiva, hay otras formas de convertir explícitamente un tipo de datos en otro. Puede utilizar los operadores de conversión de tipos de PHP o las funciones de conversión de tipos para este propósito.

Operadores de fundición de tipo

Para convertir una expresión de un tipo en otra, debe poner el tipo de datos de este último entre paréntesis antes de la expresión.

$var=(type)expr;

Algunos de los operadores de conversión de tipos en PHP son:

  • (int) or (integer) casts to an integer
  • (bool) or (boolean) casts to a boolean
  • (float) or (double) or (real) casts to a float
  • (string) casts to a string
  • (array) casts to an array
  • (object) casts to an object

Conversión a entero

Puede convertir fácilmente un valor flotante en un entero. Echa un vistazo al siguiente ejemplo:

<?php
   $a = 9.99;
   $b = (int)$a;
   var_dump($b);
?>

Producirá el siguiente resultado:

int(9)

Tenga en cuenta que el valor float no se redondea al entero más cercano; en su lugar, solo devuelve la parte entera.

Conversión de cadena a entero

El operador (int) también convierte una cadena en entero. La conversión es sencilla si la cadena consta solo de dígitos.

<?php
   $a = "99";
   $b = (int)$a;
   var_dump($b);
?>

Aquí, obtendrá el siguiente resultado:

int(99)

Incluso si la cadena contiene un número de punto flotante, el operador (int) devuelve solo la parte entera.

Ahora tomemos otro ejemplo para entender un caso especial. Si la cadena es alfanumérica, la conversión con (int) funciona de manera diferente.

  • Si la cadena comienza con dígitos seguidos de caracteres no numéricos, solo se tienen en cuenta los dígitos iniciales.
  • Si la cadena comienza con caracteres no numéricos y los dígitos están en el medio, el operador csting devuelve «0».

Echa un vistazo al siguiente ejemplo:

<?php
   $a = "10 Rs.";
   $b = (int)$a;
   var_dump($b);

   $a = "$100";
   $b = (int)$a;
   var_dump($b);
?>

Producirá el siguiente resultado:

int(10)
int(0)

Conversión a tipo flotante

Puede utilizar el operador de conversión (float) o (double) para convertir explícitamente una variable o expresión en float.

<?php
   $a = 100;
   $b = (double)$a;
   var_dump($b);
?>

Producirá el siguiente resultado:

float(100)

Una cadena que contenga cualquier representación numérica válida se puede convertir en un tipo flotante mediante un operador de conversión.

<?php
   $a = "100";
   $b = (double)$a;
   var_dump($b);

   $a = "9.99";
   $b = (float)$a;
   var_dump($b);
?>

Aquí, obtendrá el siguiente resultado:

float(100)
float(9.99)

La cadena se convierte en float incluso cuando incrusta una notación científica de float. Echa un vistazo al siguiente ejemplo:

<?php
   $a = "1.23E01";
   $b = (double)$a;
   var_dump($b);
   $a = "5.5E-5";
   $b = (float)$a;
   var_dump($b);
?>

Producirá el siguiente resultado:

float(12.3)
float(5.5E-5)

Se omiten todos los caracteres no numéricos después de los números de coma flotante. Del mismo modo, la cadena se convierte en «0» si comienza con cualquier carácter no numérico. Vea el siguiente ejemplo:

<?php
   $a = "295.95 only";
   $b = (double)$a;
   var_dump($b);

   $a = "$2.50";
   $b = (float)$a;
   var_dump($b);
?>

Producirá el siguiente resultado:

float(295.95)
float(0)

Conversión al tipo de cadena

Mediante el uso de un operador de conversión, cualquier expresión que se evalúe como un punto flotante o un entero se puede convertir en un tipo de cadena. A continuación se dan algunos ejemplos:

<?php
   $a = 100;
   $b = (string)$a;
   var_dump($b);

   $x = 55.50;
   $y = (string)$x;
   var_dump($y);
?>

Obtendrá el siguiente resultado:

string(3) "100"
string(4) "55.5"

Lanzamiento a tipo Bool

Cualquier número distinto de cero, ya sea entero o flotante, se convierte en true con el operador (bool). Una expresión que se evalúa como «0» devuelve false. Una cadena siempre se convierte en true.

Echa un vistazo al siguiente ejemplo:

<?php
   $a = 100;
   $b = (bool)$a;

   $x = 0;
   $y = (bool)$x;

   $m = "Hello";
   $n = (bool)$m;

   var_dump($b);
   var_dump($y);
   var_dump($n);
?>

Producirá el siguiente resultado:

bool(true)
bool(false)
bool(true)

Funciones de fundición de tipos

PHP incluye las siguientes funciones integradas para realizar la conversión de tipos:

  • intval()
  • floatval()
  • strval()

Analicemos estas funciones integradas en detalle.

La función intval()

Esta función obtiene el valor entero de una variable.

intval(mixed$value,int$base=10):int

El parámetro $base es 10 de forma predeterminada, lo que significa que el valor se convierte en un número decimal.

  • Si el valor es un float, la función intval() devuelve un entero, descartando la parte fraccionaria.
  • Una representación de cadena de un número devuelve un entero correspondiente, descartando la parte fraccionaria, si la hubiera.
  • Si el valor es una cadena con un número octal válido y la base es 8, la función intval() devuelve un número octal correspondiente.

Cuando la base es «0», la conversión del valor se realiza sobre la base del prefijo de caracteres.

  • Si el valor comienza por 0X o 0x, se devuelve un número hexadecimal.
  • Si el valor comienza con 0B o 0b, se devuelve un número binario
  • Si el valor comienza con 0, la función devuelve un número octal.

La función intval() devuelve 1 para valores booleanos verdaderos, 0 para valores booleanos falsos.

Ejemplo

El siguiente ejemplo muestra cómo funciona la función intval():

<?php
   echo intval(42). PHP_EOL;                     
   echo intval(4.2). PHP_EOL;                    
   echo intval('42') . PHP_EOL;                   

   echo intval(042) . PHP_EOL;         # 0ctal number 
   echo intval('042', 0) . PHP_EOL;    # 0ctal number
   echo intval('42', 8) . PHP_EOL;     # octal  

   echo intval(0x1A) . PHP_EOL;        # Hexadecimal              
   echo intval('0x1A', 16) . PHP_EOL;  # Hexadecimal           
   echo intval('0x1A', 0) . PHP_EOL;   # Hexadecimal         

   echo intval(false) . PHP_EOL;                  
   echo intval(true) . PHP_EOL; 
?>

Producirá el siguiente resultado:

42
4
42
34
34
34
26
26
26
0
1

La función floatval()

La función floatval() obtiene el valor float de una expresión.

floatval(mixed$value):float

El valor puede ser cualquier variable escalar. La cadena con caracteres no numéricos devuelve «0». Una cadena con una representación numérica o con la subcadena inicial con una representación numérica devuelve el número correspondiente. El siguiente ejemplo muestra cómo funciona la función floatval():

<?php
   echo floatval(42). PHP_EOL;                     
   echo floatval(4.2). PHP_EOL;                    
   echo floatval('42') . PHP_EOL;                   

   echo floatval('99.90 Rs') . PHP_EOL;      
   echo floatval('$100.50') . PHP_EOL;      
   echo floatval('ABC123!@#') . PHP_EOL; 

   echo (true) . PHP_EOL; ;
   echo (false) . PHP_EOL; 
?>

Producirá el siguiente resultado:

42
4.2
42
99.9
0
0
1

La función doubleval() es un alias de la función floatval() y, por lo tanto, devuelve resultados similares.

La función strval()

La función strval() obtiene el valor de cadena de una variable. Esta función no realiza ningún formateo en el valor devuelto.

strval(mixed$value):string

El valor que se está convirtiendo en una cadena puede ser cualquier tipo escalar, null o un objeto que implemente el método __toString(). Echa un vistazo al siguiente ejemplo:

<?php
   echo strval(42). PHP_EOL;                     
   echo strval(4.2). PHP_EOL;                    
   echo strval(4.2E5) . PHP_EOL;                   

   echo strval(NULL) . PHP_EOL;      

   echo (true) . PHP_EOL; 
   echo (false) . PHP_EOL; 
?>

Producirá el siguiente resultado:

42
4.2
420000

1

En el ejemplo siguiente se define una clase que implementa el método _toString().

<?php
   class myclass {
      public function __toString() {
         return __CLASS__;
      }
   }
   echo strval(new myclass);
?>

Aquí, obtendrá el siguiente resultado:

myclass