PhpStorm、Laravel和自动完成

PhpStorm、Laravel和自动完成,php,phpstorm,Php,Phpstorm,我在TreeGen类中有一个方法run(): class TreeGen implements TreeGenerable{ public function run() { ... $this->pushEmptyGroupsToTree($numFighters); ... } } 问题是,$this可能是tree gen的4个子类之一,所有这些方法都实现了不同版本的pushEmptyGroupsToTree 但是PhpStorm只在TreeGen

我在
TreeGen
类中有一个方法
run()

class TreeGen implements TreeGenerable{

 public function run()
 {
     ...
     $this->pushEmptyGroupsToTree($numFighters);
     ...
 }
}
问题是,
$this
可能是tree gen的4个子类之一,所有这些方法都实现了不同版本的
pushEmptyGroupsToTree

但是PhpStorm只在TreeGen类中查找
pushEmptyGroupsToTree
,当然,我没有在超类中定义它,所以它没有检测到它


有没有办法让他识别子类方法?

IDE的行为是正确的。您要么需要声明这个类抽象,要么在这里或在超类中声明抽象方法

更新

可以从
TreeGen的实例调用
TreeGen的
run
方法

$treeGen = new TreeGen;
$treeGen->run();
这将导致调用未定义的方法出现错误


如果不应该直接调用
TreeGen
,那么它应该是抽象的。

IDE的行为正确。您要么需要声明这个类抽象,要么在这里或在超类中声明抽象方法

更新

可以从
TreeGen的实例调用
TreeGen的
run
方法

$treeGen = new TreeGen;
$treeGen->run();
这将导致调用未定义的方法出现错误


如果
TreeGen
不应该直接调用,则它应该是抽象的。

如果您不想直接使用
TreeGreen
,请声明它是抽象的:

abstract class TreeGen implements TreeGenerable {
// ...
如果需要子类声明该方法,请在超类中将其声明为抽象:

abstract class TreeGen implements TreeGenerable
{
    // ...
    abstract public function pushEmptyGroupsToTree($numFighters);
}

现在,如果不实现
pushEmptyGroupsToTree
,您就无法扩展
TreeGen
,如果您不想直接使用
TreeGen
,请将其声明为抽象:

abstract class TreeGen implements TreeGenerable {
// ...
如果需要子类声明该方法,请在超类中将其声明为抽象:

abstract class TreeGen implements TreeGenerable
{
    // ...
    abstract public function pushEmptyGroupsToTree($numFighters);
}

现在,如果不实现
pushEmptyGroupsToTree
,您就无法扩展
TreeGen
。对于这种情况,您必须使用和

别忘了:

  ide-helper:generate  Generate a new IDE Helper file.
  ide-helper:meta      Generate metadata for PhpStorm
  ide-helper:models    Generate autocompletion for models

在这种情况下,您必须使用和

别忘了:

  ide-helper:generate  Generate a new IDE Helper file.
  ide-helper:meta      Generate metadata for PhpStorm
  ide-helper:models    Generate autocompletion for models
即将发布的(2017.2)版本将包括改进的子->父关系检测。您可以在最新的EAP中查看:即将发布的(2017.2)版本将包括改进的子->父关系检测。您可以在最新的EAP中进行检查: