PHP 中的严格类型会影响变量吗?

Do strict types in PHP affect variables?

我知道在使用 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 否则代码甚至无法编译。

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

Strict typing applies to function calls made from within the file with strict typing enabled, not to the functions declared...

因此您使用 non-integer 调用函数:

add('example',2);

会return你预期的错误-

Fatal error: Uncaught TypeError: Argument 1 passed to add() must be of the type int, string given, called in...

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