Strings numéricos
En esta página
Strings numéricos#
Un string PHP se considera numérico si puede ser interpretado como un int o un float.
Formalmente a partir de PHP 8.0.0:
WHITESPACES \s*
LNUM [0-9]+
DNUM ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*)
EXPONENT_DNUM (({LNUM} | {DNUM}) [eE][+-]? {LNUM})
INT_NUM_STRING {WHITESPACES} [+-]? {LNUM} {WHITESPACES}
FLOAT_NUM_STRING {WHITESPACES} [+-]? ({DNUM} | {EXPONENT_DNUM}) {WHITESPACES}
NUM_STRING ({INT_NUM_STRING} | {FLOAT_NUM_STRING})
PHP también dispone de un concepto de strings iniciando numéricamente. Se trata simplemente de un string que comienza como un string numérico seguido de cualquier carácter.
[!NOTE] Cualquier string que contenga la letra
E(insensible a mayúsculas y minúsculas) delimitada por números será considerada como un número expresado en notación científica. Esto puede producir resultados inesperados.Scientific Notation Comparisons
```
```
Strings utilizados en contextos numéricos#
Cuando una string debe ser evaluada como un número (por ejemplo, operaciones aritméticas, declaración de tipo int, etc.), se siguen los siguientes pasos para determinar el resultado:
-
Si el
stringes numérico, se resuelve enintsi elstringes un string numérico entero y entra dentro de los límites del tipoint(tales como definidas porPHP_INT_MAX), de lo contrario se resuelve en unfloat. -
Si el contexto permite los strings iniciando numéricamente y el
stringes uno de ellos, se resuelve enintsi la parte inicial delstringes un string numérico entero y entra dentro de los límites del tipoint(tales como definidas porPHP_INT_MAX), de lo contrario se resuelve en unfloat. Además, se genera un error de nivelE_WARNING. -
Si la
stringno es numérica, se lanza unaTypeError.
Comportamiento anterior a PHP 8.0.0#
Antes de PHP 8.0.0, un string se consideraba numérico solo si tenía espacios en blanco al inicio del string, si tenía espacios en blanco al final del string, el string se consideraba como un string iniciando numéricamente.
Antes de PHP 8.0.0, cuando un string se utilizaba en un contexto numérico, seguía los mismos pasos que los anteriores, con las siguientes diferencias:
-
El uso de un string iniciando numéricamente generaba un error de tipo
E_NOTICEen lugar deE_WARNING. -
Si el string no era numérico, se generaba un
E_WARNINGy se devolvía el valor0.
Anterior a PHP 7.1.0, ni E_NOTICE ni E_WARNING se generaban.
<?php
$foo = 1 + "10.5"; // $foo es float (11.5)
$foo = 1 + "-1.3e3"; // $foo es float (-1299)
$foo = 1 + "bob-1.3e3"; // TypeError a partir de PHP 8.0.0, $foo era integer (1) anteriormente
$foo = 1 + "bob3"; // TypeError a partir de PHP 8.0.0, $foo era integer (1) anteriormente
$foo = 1 + "10 Small Pigs"; // $foo es integer (11) y se genera un E_WARNING en PHP 8.0.0, E_NOTICE anteriormente
$foo = 4 + "10.2 Little Piggies"; // $foo es float (14.2) y se genera un E_WARNING en PHP 8.0.0, E_NOTICE anteriormente
$foo = "10.0 pigs " + 1; // $foo es float (11) y se genera un E_WARNING en PHP 8.0.0, E_NOTICE anteriormente
$foo = "10.0 pigs " + 1.0; // $foo es float (11) y se genera un E_WARNING en PHP 8.0.0, E_NOTICE anteriormente
?>