【问题标题】:Is it possible to specify explicit type for the parameter in a caller side for PHPDoc是否可以在 PHPDoc 的调用方中为参数指定显式类型
【发布时间】:2018-08-29 23:30:59
【问题描述】:

有一个方法调用表达式:

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

setUser 被声明为

public function setUser(UserAccount $user): self

$this->em->getReference 作为 Doctrine 的实体管理器方法返回 object|null

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

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

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

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

【问题讨论】:

    标签: php phpstorm phpdoc


    【解决方案1】:

    我很确定他们称之为PHPStorm advanced metadata 是可能的。据我了解,你想要这样的东西(你可能需要试验)

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

    【讨论】:

    • 哇,我不知道这存在,这太棒了
    • 哇,这很难看,但完美地回答了我的问题,谢谢
    • @zerkms 它对你有用吗?您是否完全按照答案中的方式实现了代码,或者您是否进行了一些调整以使其正常工作?我的意思是将其包含在命名空间 PHPSTORM_META{}
    • @sdespont 不,即使尝试也很难看:我不喜欢对我的工具进行太多配置,如果无法推断,就让它保持原样。
    【解决方案2】:

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

    Symfony plugin claims 起只有下一个功能:

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

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

    有一个关于getReference() resolving的Github问题。

    【讨论】:

      猜你喜欢
      • 2011-05-23
      • 1970-01-01
      • 1970-01-01
      • 2019-08-26
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 2012-11-24
      • 2011-11-26
      相关资源
      最近更新 更多