微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP 严格模式,类型声明为 float 接受一个整数

如何解决PHP 严格模式,类型声明为 float 接受一个整数

遇到这个例子:

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

最后的gettype输出'double',我不知道为什么。设置了严格类型并且函数参数具有浮点类型。我认为它应该抛出 TypeError 因为我们在调用函数时传递了 int 类型,但由于某种原因它没有。

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

一个类似的例子,它抛出一个TypeError,但是因为返回类型,确实是错误的类型。

如果我将输入类型更改为 int 并尝试使用浮点数调用函数,它会抛出 TypeError,但是当我尝试原始示例时,它不会抛出任何内容。谁能解释一下原因?

兄弟,

解决方法

每个the manual on strict typing

默认情况下,PHP 会将错误类型的值强制转换为预期的 如果可能,标量类型声明。例如,一个函数是 给一个期望字符串的参数的 int 将获得一个变量 字符串类型。

可以在每个文件的基础上启用严格模式。在严格 模式,只有与类型声明完全对应的值才会 被接受,否则将抛出 TypeError。 唯一的例外 这个规则是一个 int 值将传递一个浮点类型声明。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。