PHP类型提示:bool和int

时间:2017-08-20 02:56:44

标签: php types casting

我刚刚在一个WP插件中调试了一些PHP 7.1代码,其中一个函数只返回01,当我预期其他各种整数时。我意识到我忘了从之前删除(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();

Test the code here.

当然,在boolint之间展开很容易,但是为什么这不会引发TypeError

  

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

1 个答案:

答案 0 :(得分:2)

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

引自PHP 7 New Features

  

要启用严格模式,必须将单个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