【问题标题】:Can I indicate dynamic type returned to PhpStorm?我可以指示返回给 PhpStorm 的动态类型吗?
【发布时间】:2015-04-09 18:39:49
【问题描述】:

我有 3 个课程,例如:

class Foo
{
    static function test()
    {
       return new static();
    }
}

class Bar extends Foo
{}

class Baz extends Foo
{}

现在如果调用:

$var = Bar::test();

我希望 PhpStorm 将 $var 识别为 called_class,此处为:Bar

但是,如果我这样做 $var = Baz::test(); $varBaz 实例。

如何获取动态的 called_class 以向 PhpStorm 指示返回的类型?

我有一个类似

的语法
/** @return "called_class" */

帮助 PhpStorm 并指明类型?

【问题讨论】:

  • 我真的不明白你的问题。你想要像return static; 一样的东西吗?
  • 如果您有static 方法,则不能返回$this,因为您目前根本没有实例。您可以编辑您的问题以表明您真正想要返回的内容吗?
  • @return static(用于静态和“正确”方法)或@return $this(仅用于“正确”方法)可以正常工作。
  • 对不起,是的,我做错了例子。我编辑:它返回不是“this”,因为这是不可能的,return new static();

标签: php comments phpstorm


【解决方案1】:

首先,您的静态函数有错误。你不能用

 return $this;

因为静态调用不会创建任何实例。所以你必须创建一个新实例。

class Foo
{
    public static function test()
    {
        return new static();
    }
}

static 关键字将实例化类本身的一个新实例。

class Bar extends Foo
{
    public function fooBar(){}
}

class Baz extends Foo
{
    public function fooBaz(){}
}

我刚刚添加了 foo 函数来向您展示 phpStorm 现在可以正确找到源代码。

$var = Bar::test();
$var->fooBar();

$var 现在是 Bar 的一个实例

$var2 = Baz::test();   
$var2->fooBaz();

$var2 现在是 Baz 的一个实例

【讨论】:

  • 是的,我编辑了我的错误,我当然会说return new static()...但是,我的目标是保持儿童班的整洁。 我不想在子类中声明方法。
  • 你不需要。只想表明它可以工作并且 phpStorm 将正确显示可用功能
  • 事实上 LasyOne 告诉我一个好的答案:/** @return static */ 有效!
猜你喜欢
  • 2015-06-13
  • 2017-07-27
  • 2021-01-31
  • 2021-04-13
  • 2011-02-02
  • 1970-01-01
  • 2015-10-21
  • 1970-01-01
  • 2014-08-29
相关资源
最近更新 更多