【发布时间】:2018-03-25 19:42:46
【问题描述】:
如果我打开了strict_types,并且我将int 传递给设置为接受?float 作为参数类型的函数,PhpStorm 会发出警告,但代码仍然可以正常执行。有趣的是,如果参数类型只是float(没有?),PhpStorm 不会发出警告。
例如:
<?
declare(strict_types=1);
function strictTypesTest (?float $float) {
echo $float;
}
strictTypesTest(42);
最后一行 (strictTypesTest(42);) 有一个红色下划线和一个警告说 Parameter is expected to be 'float|null', 'int' given:
代码执行良好,因为在PHP docs on strict types 上,严格类型规则有一个例外:
此规则的唯一例外是可以将整数提供给期望浮点数的函数。
如果我只将 float 作为参数类型(而不是 ?float),那么 PhpStorm 不会发出警告。
为什么只有在我添加?时才会触发警告
【问题讨论】:
-
你的语言版本是否在phpstorm中设置为php 7.1?
-
@ChristianElowsky 是的,“PHP 语言级别:7.1(常量可见性,可为空值,多个异常)”我确实说过它在没有
?的情况下工作,如果你在你的电脑上尝试它,你会收到警告吗PhpStorm? -
strictTypestest(42.0);会成功吗? -
@MarcinOrlowski 会的,但我的问题不是如何克服错误,而是它发生的原因。
-
是的,但如果
42.0有效而42无效,则表明检查中存在错误,因为 PHP 不会抱怨看到42。
标签: php phpstorm php-7 type-declaration phpstorm-2017.2