【问题标题】:Suggested methods losing in PhpStorm when a subclass is implemented实现子类时在 PhpStorm 中丢失的建议方法
【发布时间】:2016-11-27 01:14:03
【问题描述】:

我有以下类结构

我正在使用 Symfony2 的服务来管理 BaseHandlerBaseManager

class BaseHandler implements IHandler
{
    /**
     * @var IManager
     */
    protected $manager;

    ...

    public function setManager(IManager $manager)
    {
        $this->manager = $manager;
    }
    ...
}

一切正常,但问题是当我尝试使用 SpecializedManager 类的一些方法时,PhpStorm 的建议没有显示它们的方法,只显示属于 IManager 的方法。

例如在我的控制器中

public function indexAction(){
    $handler = $this->get('appbundle.handler.specialized_handler');
    $items = $this->manager->mySubClassMethod(); // PHPStorm shows warning
    ...
}

我不知道如何在处理程序子类中设置 var manager 的注释以更改为类似 @var SpecializedHandler $manager 的内容,建议中也没有出现其他替代方法。

注意:基类或扩展为多个专门的子类。

【问题讨论】:

  • 看看this SO question。
  • 您可能需要使用中间变量 ($manager = $this->manager; $manager->mySubClassMethod()),您可以按照您的建议通过内联 @var 输入提示。另一种方法(更好的方法,因为它仅依赖于 PHPDoc)是通过 @property 在当前/父类中重新声明 $manager 属性(必须位于该类的 PHPDoc 中)。所有这一切都是因为使用 PHPDoc(和 PhpStorm 的静态分析),您只能键入提示 1 级对象(e.g. $this, $manager` 等)并且不能执行 n 级($this->manager 等)。跨度>
  • 还有其他方法,例如:在此/父类中引入 getManager() 方法,该方法将包含正确的 @return 标签并在您的代码中使用它而不是 $this->manager

标签: php symfony phpstorm phpdoc


【解决方案1】:

当您使用 PHPStorm 时,您可以为 PHPStorm 安装 Symfony2 插件:https://plugins.jetbrains.com/plugin/7219?pr=phpStorm

安装此插件(并在项目中启用)后,您应该会自动在服务上完全自动完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 2023-04-10
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    • 2017-11-25
    相关资源
    最近更新 更多