PHP 函数的字符串类型声明接受整数



由于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";是否(如您所问(高度依赖于实现。

最新更新