繁体   English   中英

PHP 的(浮点)转换可以返回非浮点值吗?

[英]Can PHP's (float) casting ever return a non-float value?

我正在调试一些代码,之前的开发人员写道:

if (!is_float((float)$value)) {
  throw new \Exception();
}

在下表中, R是将具有指定TYPEVALUE转换为(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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM