我刚刚调试了一些 PHP 7.1 代码,其中我忘记删除返回值上的(bool)
强制转换,但该函数声明的返回类型为int
:
function get_foo(): int {
$val = get_option('foo');
return (bool) $val;
}
$foo = get_foo();
在此处测试代码。
当然,在bool
和int
之间转换很容易,但这为什么没有抛出 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