是否可以在PHPDoc的调用方中为参数指定显式类型

时间:2018-08-29 23:30:59

标签: php phpstorm phpdoc

有一个方法调用表达式:

$session->setUser($this->em->getReference(UserAccount::class, $ownerId));

其中setUser被声明为

public function setUser(UserAccount $user): self

$this->em->getReference是Doctrines的实体管理器方法,返回object|null

因此PhpStorm将此调用标记为参数参数类型不匹配。

我当然可以将其拆分为2条语句并输入:

/** @var UserAccount $userAccount */
$userAccount = $this->em->getReference(UserAccount::class, $ownerId);
$session->setUser($userAccount);

但是也许有一种方法可以内联吗?

2 个答案:

答案 0 :(得分:3)

不幸的是,没有这样的语言功能,您只能依靠PHPDoc或Symfony插件来安装PHPStorm。

Symfony plugin claims起,仅以下一项功能:

  • QueryBuilder支持,包括链接和嵌套方法
  • 学说的getRepository的引用和TypeProvider
  • 用于EntityRepository的TypeProvider :: find / findOneBy / findAll / findBy
  • 字段和关系解析与注释和Yaml

您可以使用上面显示的find*()方法或PHPDoc解决方案。请记住,根据Doctrine方法可能返回null的可能性,插件方式仍然会向您显示有关将null作为不可空参数传递的警告。

关于getReference() resolving的Github问题。

答案 1 :(得分:3)

我非常确定他们所说的PHPStorm advanced metadata是可能的。据我了解,您想要这样的东西(您可能需要尝试)

override(\Doctrine\ORM\EntityManagerInterface::getReference(0), map([
    '' => '@'
]))