2017-06-05 7 views
0

Ich habe eine Methode run() in TreeGen Klasse:PhpStorm, Laravel und autocompletition

class TreeGen implements TreeGenerable{ 

public function run() 
{ 
    ... 
    $this->pushEmptyGroupsToTree($numFighters); 
    ... 
} 
} 

Thing $this ist eine der 4 Subklassen des Baumes gen sein könnte, und alle, die Methode verschiedene Versionen von pushEmptyGroupsToTree implementieren.

Aber PhpStorm sucht nur nach pushEmptyGroupsToTree in TreeGen-Klasse und natürlich habe ich es nicht in der Super-Klasse definiert, so dass es nicht erkannt wird.

Gibt es eine Möglichkeit, ihn dazu zu bringen, Unterklassenmethoden zu erkennen?

+0

nächsten (2017,2) Version verbessert Kind- umfassen würde> Eltern Beziehung Erkennung. Sie können es in der neuesten EAP überprüfen: https://confluence.jetbrains.com/display/PhpStorm/PhpStorm+Early+Access+Program –

Antwort

2

IDE verhält sich korrekt. Sie müssen diese Klassenzusammenfassung entweder deklarieren oder die abstrakte Methode hier oder in der übergeordneten Klasse deklarieren.

UPDATE

Method run von TreeGen könnte von Instanz Treegen

$treeGen = new TreeGen; 
$treeGen->run(); 

und dass Anruf zu undefinierter Methode Fehler verursacht aufgerufen werden.

Wenn TreeGen nicht direkt aufgerufen werden soll, sollte es abstrakt sein.

1

Wenn Sie nicht wollen, TreeGreen direkt verwendet werden, erklären sie abstrakt als solche:

abstract class TreeGen implements TreeGenerable { 
// ... 

Wenn Sie die Kind-Klassen, die Methode haben erklärt, erklären sie als Zusammenfassung in der Superklasse:

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

Jetzt kippen Sie TreeGen erweitern, ohne pushEmptyGroupsToTree zu Implementierung sowie

0

Für diesen Fall Sie verwenden müssen, PHPDoc und type hinting

Und don`t vergessen:

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