由于123
是一个整数而不是字符串,所以我希望以下内容会生成类型错误,所以可以为需要字符串的函数提供一个整数吗?
foo(123);
function foo(string $str) {
...
}
是的,因为整数可以转换为字符串(例如数组不能(。是,除非您声明declare(strict_types=1)
。
foo(123);
function foo(string $str) {
var_dump($str); // string(3) "123"
}
但以下内容:
declare(strict_types=1);
function foo(string $str) { }
foo(123); // FAIL (Uncaught TypeError)
将投掷:
致命错误:未捕获类型错误:foo((:参数#1($str(的类型必须为字符串,给定时为int
PHP手册非常具体地介绍了这种行为,并直接介绍了您提出的示例:
默认情况下,如果可能的话,PHP会将错误类型的值强制到预期的标量类型声明中。例如,为期望字符串的参数给定int的函数将获得字符串类型的变量。
这是否是";OK";是否(如您所问(高度依赖于实现。