`intval()`和`(int)`如何处理空格?

时间:2014-12-20 14:16:15

标签: php integer type-conversion

String conversion to numbers上的PHP手册说:

  

该值由字符串的初始部分给出。如果字符串以有效数字数据开头,则这将是使用的值。否则,该值将为0(零)。

这意味着当字符串转换为数字时,除字符串开头的数字,加号或减号以外的任何内容都应返回0。然而,(一些)字符串开头的空格被忽略:

echo intval("     3");  // 3
echo intval("
3");  // 3

intval()(int)

这种行为记录在哪里?

1 个答案:

答案 0 :(得分:0)

观察到的行为很大程度上没有记录。空间剥离可能取决于C中的strtod(),它应使用isspace()

intval() manual说:

  

integer casting的通用规则适用。

点击链接(删除链接):

  

要将值显式转换为整数,请使用(int)(integer)强制转换。但是,在大多数情况下,不需要强制转换,因为如果运算符,函数或控制结构需要整数参数,则会自动转换值。也可以使用intval()函数将值转换为整数。

所以它看起来像是铸造而intval()是等价的。并略低于上面的引用:

  

来自字符串

     

请参阅String conversion to numbers

行。对我们来说没有什么真正有用的,除了这个小小的注释:

  

有关此转换的更多信息,请参见strtod(3)的Unix手册页。

再次关注链接线程,选择strtod() specified in POSIX的版本,即UNIX的API标准。

  

这些函数应将nptr指向的字符串的初始部分转换为 double float ,以及<强> long double 分别代表。首先,他们将输入字符串分解为三个部分:   1.一个初始的,可能是空的白色空格字符序列(由isspace()指定)   ...

常识告诉我们这只应用于浮点数,因为strtod()在C中返回一个浮点数,但数字解析和内部表示在PHP中是古怪的,就像这种语言中的几乎所有内容一样。谁知道它是如何真正起作用的。最好不要知道。