2017-09-23 53 views
1

随着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和无穷,将永远是零转换为整数时。

恕我直言,这是相当混乱和不一致,因为无论是每个浮动自动转换或没有。

我错过了什么?

+0

它打印“通知:未定义的变量:X” https://开头3v4l。 org/TpvFk,但如果我们更正你的错误并删除你的int cast,它会返回“double 2”https://3v4l.org/Bpv4Y – Andreas

+0

@BenM http://php.net/manual/en/math.constants.php或尝试'var_dump(NAN);' – zer0uno

+1

@Andreas显然'$ x'是一个复制n贴纸的错误。然而,这里的要点是自动转换,如果我删除了类型提示,那么就没有问题了。 – zer0uno

回答

0

类型转换(显式)和类型转换(隐式)之间是有区别的。参数值不会被转换为int,而是被强制转换。您可以将任何值为int,例如:

echo (int) "a"; // prints 0 

但通过“A”到你的类型声明的函数抛出一个错误,就像路过NAN做:

automatic_int_conversion("a"); // TypeError 

强制只能同投射在非常有限的一组价值观上。

您可能要启用严格类型禁用强制转换为函数的参数,那么它会工作“预期”:

declare(strict_types=1);