我有一个像这样的抽象类
abstract class AbstractClass
{
/**
* @return AbstractClass
*/
public static function forge($data)
{
return new static($data);
}
}
和另一个继承它的类
class OtherClass extends AbstractClass
{
public function my_method()
{
echo 'hello';
}
}
当我拨打电话时
$otherClass = OtherClass::forge($otherclass_data);
PhpStorm不会自动完成my_method()
,实际上会弹出错误:
Method 'my_method' not found in class 'AbstractClass'
我有什么方法可以强迫PhpStorm知道我伪造了OtherClass
,而不是AbstractClass
?
答案 0 :(得分:2)
在这种情况下使用@return static
,例如
abstract class AbstractClass
{
/**
* @return static
*/
public static function forge($data)
{
return new static($data);
}
}
这样它就会被解析为调用类。
<强> P.S。强>
类似地,@return $this
可用于非静态方法。
<强> P.P.S。强>
请注意,在一些不那么简单的情况下(例如,在另一个使用这种方法的类的另一个方法中使用一个具有此类@return
(静态或$ this)的类的方法)可能会导致IDE混淆这将产生错误警告 - 这是一个IDE问题,希望将在未来的一个版本中得到解决。