2017-06-05 33 views
0

我有一個方法run()TreeGen類:PhpStorm,Laravel和autocompletition

class TreeGen implements TreeGenerable{ 

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

事情是$this可能是樹代的4子類中的一個,而所有這些方法實現不同版本的pushEmptyGroupsToTree

但PhpStorm僅在TreeGen類尋找pushEmptyGroupsToTree和關閉過程中,我沒有它的超類中定義的,所以也沒有檢測到它。

有沒有辦法讓他識別子類方法?

+0

即將投產(2017.2)版本將包括提高兒童安全>父母關係檢測。您可以在最新的EAP中查看:https://confluence.jetbrains.com/display/PhpStorm/PhpStorm+Early+Access+Program –

回答

2

IDE的行爲正確。你或者需要聲明這個類的抽象,或者在這裏或者在超類中聲明抽象方法。

UPDATE

方法TreeGenrun可以從實例調用的Treegen

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

,這將導致調用未定義的方法錯誤。

如果TreeGen不應該直接調用它應該是抽象的。

1

如果你不想TreeGreen直接使用,聲明它抽象爲這樣:

abstract class TreeGen implements TreeGenerable { 
// ... 

如果您需要的是兒童類有一個方法中聲明,聲明它在你的超類摘要:

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

現在你不能延長TreeGen沒有實現pushEmptyGroupsToTree以及

0

對於這種情況,你必須使用PHPDoctype hinting

而且不`噸忘記:

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