如果PHP字符串可以解释为int或float,则将其视为数字字符串。
PHP8.0.0正式可用。
空白\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也有开头数字字符串的概念。这只是一个简单的字符串,以数字字符串开始,然后是任意字符。
数字上下文中使用的字符串
如果需要将字符串作为数字进行计算(例如,算术运算、整型声明等),则将执行以下步骤来确定结果:。
如果string为数字,则如果string符合整数字符串中的整型范围限制(即,在PHP_INT_MAX中定义的值),则将其解析为int。否则将以浮动方式解决。
如果上下文允许第一个数字和字符串,则字符串的第一个部分是整数字符串,如果满足int类型限制(在PHP_INT_MAX中定义),则将其解析为int,否则将其解析为float。另外,E_出现WARNING级别错误。
如果字符串不是数字,则抛出类型错误异常。
PHP8.0.0之前的动作
在PHP8.0.0之前,字符串仅在开头有空格时被视为数字,而在末尾有空格时,字符串被视为开头的数字。
在PHP8.0.0之前,如果字符串在数字上下文中使用,则执行与上述相同的步骤,但存在以下差异:
如果使用第一个数字字符串,则E_不是WARNING错误,而是E_发生NOTICE。
如果字符串不是数字,则E_出现WARNING错误,返回0。
在PHP7.1.0之前,E_NOTICE也是E_未发生WARNING。
<?php $foo = 1 + "10.5"; // $foo 是 float (11.5) $foo = 1 + "-1.3e3"; // $foo 是 float (-1299) $foo = 1 + "bob-1.3e3"; // PHP 8.0.0 起产生 TypeError;在此之前 $foo 是 integer (1) $foo = 1 + "bob3"; // PHP 8.0.0 起产生 TypeError;在此之前 $foo 是 integer (1) $foo = 1 + "10 Small Pigs"; // PHP 8.0.0 起,$foo 是 integer (11),并且产生 E_WARNING;在此之前产生 E_NOTICE $foo = 4 + "10.2 Little Piggies"; // PHP 8.0.0 起,$foo 是 float (14.2),并且产生 E_WARNING;在此之前产生 E_NOTICE $foo = "10.0 pigs " + 1; // PHP 8.0.0 起,$foo 是 float (11),并且产生 E_WARNING;在此之前产生 E_NOTICE $foo = "10.0 pigs " + 1.0; // PHP 8.0.0 起,$foo 是 float (11),并且产生 E_WARNING;在此之前产生 E_NOTICE ?>