【问题标题】:Do strict types in PHP affect variables?PHP中的严格类型会影响变量吗?
【发布时间】:2020-11-25 16:01:25
【问题描述】:

我知道在使用declare(strict_types=1) 时,我必须传递给定类型的参数,否则会引发Exception,但有一个问题:

declare(strict_types=1);

function add(int $firstNumber, int $secondNumber)
{
    $firstNumber = "example";

    return $firstNumber . " " . $secondNumber;
}

我的问题是,如果声明了 int,为什么允许我将 $firstNumber 的类型更改为 string

例如,在 Java 中,我不能以这种方式进行强制转换。参数类型int 必须保持int 否则代码甚至无法编译。

【问题讨论】:

  • AFAIK,它不会生成严格类型的变量,而是函数参数和返回类型。似乎变量仍然允许松散类型。

标签: php php-7


【解决方案1】:

这是因为您只严格输入函数的输入,而不是返回或函数本身的任何变量。来自docs -

严格类型适用于在启用严格类型的文件中进行的函数调用,不适用于声明的函数...

所以你用非整数调用函数:

add('example',2);

将返回您期望的错误 -

致命错误:未捕获的 TypeError:传递给 add() 的参数 1 必须是 int 类型,给定字符串,调用...

但是向您的函数发送整数将允许函数调用继续进行,并且其中的变量将被类型化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多