【问题标题】:Passing an int to a param of type ?float results in a PhpStorm warning将 int 传递给 ?float 类型的参数会导致 PhpStorm 警告
【发布时间】: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


【解决方案1】:

这似乎是一个错误,我在这里提交了它:https://youtrack.jetbrains.com/issue/WI-38446

【讨论】:

  • 谢谢@EugeneMorozov,我应该在 YouTrack 上而不是 Stack Overflow 上提交错误吗?另外,请在修复时告诉我:)
  • @David “我应该在 YouTrack 上而不是 Stack Overflow 上提交错误” StackOverflow 是您报告错误的地方......还是您只询问的地方“这是一个错误还是我做错了什么”? “另外,请在修复时通知我 :)” 观看该票(星号/投票/评论)以获取有关任何进展的通知。
猜你喜欢
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
  • 2016-08-10
  • 2020-08-30
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多