Introducción: por qué strings y números en PHP son un drama eterno
\nImagina esto: estás programando una calculadora de envíos y el usuario ingresa la cantidad de productos como un string "5". Intentas sumarle 10 y obtienes "510" en lugar de 15. ¿Te suena familiar? ¡Bienvenido al mundo de la conversión de tipos en PHP!
La pregunta "How do I convert a string to a number in PHP?" es una de las más populares en Stack Overflow (más de 2 millones de visitas). Y con razón: PHP es conocido por su tipado dinámico, que a la vez simplifica la vida y crea trampas.
\nEn esta guía, exploraremos 5 formas fiables de convertir un string a número, desmentiremos mitos y aprenderemos a evitar bugs. ¡Vamos allá!
\n\nTeoría: ¿qué ocurre bajo el capó de PHP?
\nPHP es un lenguaje de tipado dinámico. Una variable puede ser un string y, un segundo después, un número. Pero hay un detalle:
\n- \n
- Conversión implícita de tipos — PHP decide por sí mismo cómo interpretar los datos (y a menudo se equivoca). \n
- Conversión explícita de tipos — tú tomas el control. \n
Cuando escribes "5" + 10, PHP convierte automáticamente el string "5" en un número. Pero prueba con "5 manzanas" + 10 y obtendrás 15 (PHP descarta silenciosamente " manzanas"). Y "manzanas 5" + 10 dará 10 (el string se considera cero). ¿Caos? Sí. Pero vamos a poner orden.
Método 1: Operador de conversión de tipo (int) y (float)
\nLa forma más rápida y sencilla es usar el casteo:
\n<?php\n$string = "42.8";\n$int = (int)$string; // 42 (parte entera)\n$float = (float)$string; // 42.8\n\necho $int; // 42\necho $float; // 42.8\n?>\nImportante: (int) descarta la parte decimal sin redondear. Para redondear, usa round() después de la conversión.
Cuándo usarlo: cuando estés seguro de que el string contiene solo un número y necesites una conversión rápida.
\n\nMétodo 2: Funciones intval() y floatval()
\nSon los "hermanos mayores" del casteo: más legibles y flexibles:
\n<?php\n$string = "123.45abc";\n\n$int = intval($string); // 123\n$float = floatval($string); // 123.45\n\n// Con indicación de base numérica (solo para intval)\n$hexString = "1A";\n$hexInt = intval($hexString, 16); // 26 (convierte un string hexadecimal)\n\necho $int; // 123\necho $float; // 123.45\necho $hexInt; // 26\n?>\nVentaja: intval() puede trabajar con diferentes bases numéricas (binaria, octal, hexadecimal). floatval() solo con decimal.
Cuándo usarlo: cuando necesites procesar "basura" al final del string o trabajar con bases numéricas no estándar.
\n\nMétodo 3: Función settype() — conversión con retorno true/false
\n¿Quieres no solo convertir, sino también verificar si la operación fue exitosa? Usa settype():
<?php\n$string = "99.9";\n$result = settype($string, "float"); // true\n\necho $string; // 99.9 (ahora es float)\necho $result; // 1 (true)\n\n// Si el string no es numérico\n$badString = "hola";\n$result = settype($badString, "integer"); // false\n\necho $badString; // 0 (convertido a cero)\necho $result; // (vacío, false)\n?>\nImportante: settype() modifica la variable original, no devuelve un nuevo valor. Es útil cuando necesitas garantizar que el tipo ha cambiado.
Cuándo usarlo: cuando requieras verificar el éxito de la conversión (por ejemplo, en entradas de usuario).
\n\nMétodo 4: Trucos aritméticos (y por qué es mejor no usarlos)
\nSí, puedes escribir $number = $string + 0 — PHP convertirá el string a número automáticamente. O $number = $st