使用PHP 7,我发现如果我有这样的函数:
function automatic_int_conversion(int $value) {
echo gettype($value) . ' ' . $value;
}
我用一个像这样的浮点参数调用它:
automatic_int_conversion(2.0); # prints out: integer 2
float(2.0)
值会自动转换为int,而如果我用float(NAN)
这样调用函数:
automatic_int_conversion(NAN); # TypeError
我收到类型错误,尽管文档说:
从PHP 7.0.0开始,取代未定义和平台相关,NaN和Infinity在转换为整数时将始终为零。
恕我直言,这非常令人困惑且不一致,因为每个浮动都会自动转换或不转换。
我错过了什么吗?
答案 0 :(得分:0)
类型转换(显式)和类型强制(隐式)之间存在差异。参数值未被强制转换为int,它正被强制转换。您可以将任何值转换为int,例如:
echo (int) "a"; // prints 0
但是传递" a"你的类型声明函数抛出一个错误,就像传递NAN一样:
automatic_int_conversion("a"); // TypeError
强制仅与在非常有限的一组值上进行投射相同。
您可能希望启用严格类型以禁用功能参数的强制,然后它将按预期工作':
declare(strict_types=1);