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)

会抛出:

致命错误:Uncaught TypeError: foo(): Argument #1 ($str) must be of type string,int given

,

PHP manual 非常具体地说明了这种行为,并直接说明了您提出的示例:

默认情况下,如果可能,PHP 会将错误类型的值强制转换为预期的标量类型声明。例如,一个函数为一个需要字符串的参数提供一个 int 值,将得到一个字符串类型的变量。

这是否“OK”(如您所问)高度依赖于实现。