我刚刚调试了一些PHP7.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);发布于 2017-08-20 04:34: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
https://stackoverflow.com/questions/45778031
复制相似问题