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...
但是向您的函数发送整数将允许函数调用继续进行,并且其中的变量将 弱 键入。
我知道在使用 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...
但是向您的函数发送整数将允许函数调用继续进行,并且其中的变量将 弱 键入。