[英]Can PHP's (float) casting ever return a non-float value?
我正在调试一些代码,之前的开发人员写道:
if (!is_float((float)$value)) {
throw new \Exception();
}
在下表中, R
是将具有指定TYPE
的VALUE
转换为(float)
。 x
表示这里可能有不同的值。
R TYPE VALUE
- ---- -----
0 null
0 bool false
1 bool true
x int x
x float x
0 string 'invalid'
x string 'x'
0 array []
1 array [x]
1 object x (raises a notice)
x resource handle (unintuitive)
我找不到任何无法转换为(float)
。 是否有可能抛出上述\\Exception
?
PHP 文档说:
转换为浮动
有关将字符串转换为浮点数的信息,请参阅字符串转换为数字。 对于其他类型的值,通过先将值转换为 integer 再转换为 float 来执行转换。 有关更多信息,请参阅转换为整数。 从 PHP 5 开始,如果对象被转换为浮点数,则会抛出一个通知。
(强调我的)
所以据我所知,上面的\\Exception
是无法访问的代码。 这是正确的还是其他开发人员知道我不知道的事情?
这目前是不可能的。
然而,这可能会改变。
原因是从数组和(非字符串)对象转换为整数在技术上是未定义的行为,请参阅有关转换为整数的文档。 https://www.php.net/manual/en/language.types.integer.php#language.types.integer.casting
由于数组和对象目前在尝试转换为整数时不会抛出任何类型错误,这意味着始终存在整数表示。
因为整数总是可以用浮点数表示(如果它太大,它甚至可能溢出到浮点数)。 此检查(当前)始终为假。
(旁注:资源句柄的浮点转换只是 PHP 分配给该资源的资源句柄号。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.