首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >忽略PHP类型提示,则不会引发TypeError异常。

问忽略PHP类型提示,则不会引发TypeError异常。
EN

Stack Overflow用户
提问于 2017-08-20 02:56:43
回答 1查看 1.1K关注 0票数 1

我刚刚调试了一些PHP7.1代码,在这些代码中,我忘记了删除返回值上的(bool)强制转换,但是函数有声明的返回类型int

代码语言:javascript
复制
function get_foo(): int {
    $val = get_option('foo');
    return (bool) $val;
}

$foo = get_foo();

在这里测试代码。

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

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

对于类型化的函数参数,也显示了相同的行为。

代码语言:javascript
复制
function get_foo(string $foo): int {
    $val = get_option($foo);
    return (bool) $val;
}

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-20 04:34:34

您需要添加strict_types指令,以使类型提示正常工作。

引用PHP 7新特性

要启用严格模式,必须在文件的顶部放置一个声明指令。这意味着对标量输入的严格性是根据每个文件配置的。该指令不仅影响参数的类型声明,还影响函数的返回类型(请参阅返回类型声明、内置PHP函数和加载扩展中的函数。

有了这个,你就应该这么做。

代码语言:javascript
复制
<?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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45778031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档