我刚刚在一个WP插件中调试了一些PHP 7.1代码,其中一个函数只返回0
或1
,当我预期其他各种整数时。我意识到我忘了从之前删除(bool)
演员。
但它让我很奇怪,因为该函数的返回类型为int
。这是一个简化版本:
function get_foo(): int {
$val = get_option('foo'); // Returns a string that can be parsed as an int
return (bool) $val;
}
$foo = get_foo();
当然,在bool
和int
之间展开很容易,但是为什么这不会引发TypeError ?
有三种情况可能会抛出TypeError。 ...第二个是从函数返回的值与声明的函数返回类型不匹配。
答案 0 :(得分:2)
您需要为类型提示添加strict_types
指令才能正常工作
要启用严格模式,必须将单个declare指令放在文件的顶部。这意味着标量的键入严格性是基于每个文件配置的。该指令不仅影响参数的类型声明,还影响函数的返回类型(请参阅返回类型声明,内置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