Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP类型提示被忽略,未引发TypeError异常_Php_Types_Casting_Function Signature - Fatal编程技术网

PHP类型提示被忽略,未引发TypeError异常

PHP类型提示被忽略,未引发TypeError异常,php,types,casting,function-signature,Php,Types,Casting,Function Signature,我刚刚调试了一些PHP7.1代码,其中我忘了删除返回值上的(bool)强制转换,但是该函数有一个声明的返回类型int: 函数get\u foo():int{ $val=get_选项(“foo”); 退货(bool)$val; } $foo=get_foo(); 当然,在bool和int之间进行转换很容易,但是为什么不抛出一个 有三种情况下可能会抛出TypeError。。。第二种情况是,从函数返回的值与声明的函数返回类型不匹配 类型化函数参数也表现出同样的行为 函数get_foo(字符串$fo

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

函数get\u foo():int{ $val=get_选项(“foo”); 退货(bool)$val; } $foo=get_foo();

当然,在
bool
int
之间进行转换很容易,但是为什么不抛出一个

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

类型化函数参数也表现出同样的行为

函数get_foo(字符串$foo):int{ $val=get_选项($foo); 退货(bool)$val; } //没有打字错误! $foo=get_foo(34);
您需要添加
strict\u 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();

啊!我怎么会错过这个呢?谢谢。另外,对于这个相对较新的PHP用户来说,这个事实令人沮丧。对我来说,每个文件的基础已经足够好了,因为它提供了足够的灵活性。毕竟,严格键入对PHP来说是额外的。在服务器上全局启用严格键入将破坏许多未在con中编码的现有PHP应用程序严格打字的形式…:)刚才会帮我省下这个错误!但我相信我会对事情有一个合理的看法P