在PHP中使用strict_types进行类型转换

时间:2018-01-24 14:08:43

标签: php casting type-conversion

为什么此代码会在没有任何问题的情况下终止? 我认为它会输出一个TypeError Exception,因为无法将Integer转换为float属性或者转换为strict_types声明的原因。

?php
declare(strict_types=1);
function multiply(float $a, float $b): float {
    return (double)$a * (double)$b;
}
$six = multiply(2, 3);
echo gettype($six);

//output: double

1 个答案:

答案 0 :(得分:3)

  

可以基于每个文件启用严格模式。在严格模式下,只接受类型声明的确切类型的变量,否则将抛出TypeError此规则的唯一例外是可以为期望浮动的函数提供整数。

     

http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration.strict

它是allowed widening primitive conversion

  

扩展的原始转换不会丢失有关数值整体大小的信息。