类型提示不适用于 php 7 中函数中的字符串

Type Hints not working for strings in function in php 7

类型提示在字符串的情况下不起作用。

function def_arg(int $name, int $address, string $test){
    return $name . $address . $test;
}

echo def_arg(3, 4, 10) ;
// It doesn't throws an error as expected.

另一方面。如果你在第一个参数中给出字符串,它会抛出一个错误,说它应该是一个 int。

 function def_arg(int $name, int $address, string $test){
        return $name . $address . $test;
    }

    echo def_arg("any text", 4, "abc") ;

// this code throws an error 
// "Fatal error: Uncaught TypeError: Argument 1 passed to def_arg() must be of the type integer, string given,"

为什么在字符串的情况下没有错误??

这是因为默认情况下,PHP 会尽可能将错误类型的值强制转换为预期的标量类型。例如,为期望字符串的参数指定整数的函数将获得字符串类型的变量。

参见 here

如果您使用可以在第二个示例中转换的值,它会起作用:

function def_arg(int $name, int $address, string $test){
    return $name . $address . $test;
}

echo def_arg("12", "22", 1) ;

这是因为这些值可以从字符串转换为整数,反之亦然。

可以在每个文件的基础上启用严格模式。在严格模式下,只会接受类型声明的确切类型的变量,否则会抛出 TypeError。此规则的唯一例外是可以将整数赋予需要浮点数的函数。来自内部函数的函数调用不会受到 strict_types 声明的影响。