php数据类型:数字格式的字符串

在 PHP 中,即使数据被定义为字符串,但数据如果可以解释为数字,PHP依然会自动将其解释为数字。

它被自动解释为整数的“int”和小数的“float”。

根据 PHP 版本的不同,操作的行为略有不同,但PHP8.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} [+-]? {EXPONENT_DNUM} {WHITESPACES}
NUM_STRING ({ INT_NUM_STRING } | {FLOAT_NUM_STRING})

但是这有点令人困惑,所以让我们看一个具体的例子。

将字符串解释为数字的示例是在算术运算(例如加法)中指定字符串时,例如:

$foo = 1 + "10.5" ;

正常情况下数字和字符串是不能相加的,但是在PHP中如果字符串可以解释为数字,则会自动转换为数字进行计算。

在本例中结果为 1+10.5=11.5。

即使是以下记数法,也会自动解释为浮点型。

$foo = 1 + "-1.3e3";

如果字符串不能被解释为这样的数字:

$foo = 1 + "bob-1.3e3";

在这种情况下,PHP 将引发“TypeError”错误。

在PHP8.0.0之前的版本中,所有不能解释为数字的字符串都被解释为“0”,导致 1 + 0 = 1,这意外地导致了 bug 。

这一点在PHP8.0.0中发生了变化。

接下来在“以数字开头的字符串”的情况下,将开头的数字解释为数字,同时发出警告。

$foo = 1 + "10 只小猪" ;

例如在此示例中,开头的“10”部分被解释为数字,并计算 1 + 10 并带有 E_WARNING 警告。

这些例子也是如此:

$foo = 4 + "10.2 只小猪" ; 
$foo = "10.0 只猪 " + 1 ; 
$foo = "10.0 只小猪" + 1.0 ;

顺便说一句,在 PHP8.0.0 之前的版本中,生成的警告是 E_NOTICE,它的错误级别低于 E_WARNING。

在PHP中,当需要将字符串解释为数字时,流程如下:

1.如果字符串是一个数字并且它在 int 类型的范围内(由 PHP_INT_MAX 定义),它会解析为一个 int,否则它会解析为浮点数

首先确定字符串是否可以解释为数字。

如果可以解释为数字且在int范围内,则解释为int类型。

php数据类型:数字格式的字符串

如果超出 int 的范围,将被解释为 float 类型。

2.如果上下文允许数字格式字符串从头开始,并且值为字符串,则解析如下:

字符串的前导部分是数字格式字符串,它是int类型,在(由 PHP_INT_MAX 定义),它解析为一个 int。否则它会解析为浮点数。除此之外,它还会引发错误级别 E_WARNING。

接下来确定字符串是否以数字开头。

如果它以数字开头,并且数字在 int 范围内,则被解释为 int 类型。

如果超出 int 的范围,将被解释为 float 类型。

3.如果字符串不是数字,则抛出 TypeError。

如果字符串不能被解释为数字,则引发 TypeError。


本文来源:词雅网

本文地址:https://www.ciyawang.com/php-float-55.html

本文使用「 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 」许可协议授权,转载或使用请署名并注明出处。

相关推荐