1

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

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

$foo = get_foo();

在这里测试代码。

当然,在booland之间很容易转换,但是为什么不抛出TypeError呢?int

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

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

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

// no TypeError!
$foo = get_foo(34);
4

1 回答 1

2

您需要添加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

于 2017-08-20T04:34:34.643 回答