类型提示在字符串的情况下不起作用。
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会在可能的情况下将错误类型的值强制转换为期望的标量类型。例如,为期望字符串的参数给定整数的函数将获得字符串类型的变量。
参见此处
如果你在第二个例子中使用可以转换的值,它会起作用:
function def_arg(int $name, int $address, string $test){
return $name . $address . $test;
}
echo def_arg("12", "22", 1) ;
这是因为这些值可以从string转换为int,反之亦然。
可以在每个文件的基础上启用严格模式。在严格模式下,只接受类型声明的精确类型的变量,或者抛出TypeError。这个规则唯一的例外是,可以给一个期望浮点值的函数一个整数。来自内部函数的函数调用将不受strict_types声明的影响。