我可以翻译为:"我能告诉PhpStorm一个函数将要返回的类型吗?"

6

在此输入图片描述

如果我有一个函数,并且在 PHPDoc 中指定它将返回一个 SqsProcessResult 对象,然后我调用一个函数来创建一个新的这些对象,但是该函数的 PHPDoc 声明返回类型为 Object (因为它是一个通用的工厂函数),那么 PhpStorm 会弹出一个橙色的警告。

我能否注释或以其他方式告诉 PhpStorm 返回类型将是 SqsProcessResult

1个回答

16

是的,你可以这样做,但由于问题本质的特点,它可能不是最干净/优雅的解决方案(至少其他人可能会这么说)。

几个选项:


#1. 只是抑制该行的检查。

  • 将插入符号放置在突出显示的区域中,然后按下Alt + Enter(或通过“灯泡”图标获得相同的菜单)
  • 找到最合适的条目..然后按箭头向右键(或单击微小三角形图标)扩展子菜单
  • 一旦到达那里--选择Suppress for statement选项--一个新的内联PHPDoc注释将被添加在该行上面,指示PhpStorm在下一行忽略该特定检查。

就像这样:

/** @noinspection PhpIncompatibleReturnTypeInspection */
return \Yii::createObject(...);
  • 优点:IDE 无警告
  • 缺点:需要额外的 PHPDoc 注释来满足 IDE 的要求(考虑到情况,这是必需的)

#2. 使用一些中间变量,在适当的位置进行类型提示。

在现有的单行代码之外添加类似以下内容的代码:

/** @var SqsProcessResult $res */
$res = \Yii::createObject(...);
return $res;
  • 优点:没有压制评论
  • 缺点:额外的变量(以及仍然需要额外的PHPDoc注释),基本上没有理由

这个主要可以用在较长的方法中,在这种方法中,这样的变量(通用的Object)将在函数体的开头/中间被创建,然后稍后使用。


#3. 尝试使用.metadata功能,并为实际的\Yii::createObject()提供解析逻辑(以便IDE根据输入参数选择正确的类)。

https://confluence.jetbrains.com/display/PhpStorm/PhpStorm+Advanced+Metadata

这是许多工具的工作方式: Laravel的IDE助手,Symfony帮助程序,DI容器帮助程序等


2
谢谢!第一个选项正是我想要的,可以避免为了代码检查而创建变量。顺便提一下,注释是 /** @noinspection PhpIncompatibleReturnTypeInspection */ - Force Hero
1
检查更新的答案--选项#3。如果正确执行--不需要评论(但最好在Yii专用论坛等上询问--他们应该已经有解决方案了,我想)。不是这一个...而是在这些行之间:http://yiifeed.com/news?id=72 - LazyOne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接