PHP 类型提示被忽略,没有引发类型错误异常



我刚刚调试了一些 PHP 7.1 代码,其中我忘记删除返回值上的(bool)强制转换,但该函数声明的返回类型为int

function get_foo(): int {
$val = get_option('foo');
return (bool) $val;
}
$foo = get_foo();

在此处测试代码。

当然,在boolint之间转换很容易,但这为什么没有抛出 TypeError

有三种情况可能会抛出 TypeError。第二种是从函数返回的值与声明的函数返回类型不匹配的情况。

类型化函数参数也表现出相同的行为。

function get_foo(string $foo): int {
$val = get_option($foo);
return (bool) $val;
}
// no TypeError!
$foo = get_foo(34);

您需要添加strict_types指令才能使类型提示正常工作

引用 PHP 7 新功能

若要启用严格模式,必须将单个声明指令放在文件的顶部。这意味着标量键入的严格性是按文件配置的。此指令不仅影响参数的类型声明,还影响函数的返回类型(请参阅返回类型声明、内置 PHP 函数和加载扩展中的函数(。

有了这个,你应该这样做。

<?php
declare(strict_types=1);
function get_option_foo() : int {
$val = get_option('foo'); // Returns a string that can be parsed as an int
return (bool) $val;
}
$foo = get_option_foo();

再试一次,您将收到Uncaught TypeError Exception

相关内容

最新更新