1
我有下面的類結構建議的方法PhpStorm失去當一個子類實現
我使用Symfony2中的服務管理BaseHandler
和BaseManager
類
class BaseHandler implements IHandler
{
/**
* @var IManager
*/
protected $manager;
...
public function setManager(IManager $manager)
{
$this->manager = $manager;
}
...
}
所有作品沒問題,但問題是當我嘗試使用SpecializedManager
類的某些方法並且PhpStorm的建議未顯示其方法時,只有屬於的方法。
例如在我的控制器
public function indexAction(){
$handler = $this->get('appbundle.handler.specialized_handler');
$items = $this->manager->mySubClassMethod(); // PHPStorm shows warning
...
}
我不知道如何處理程序子類設置VAR manager
的註解來改變這樣的事情@var SpecializedHandler $manager
,既不是方法的另一種替代的方式出現在建議。
注意:基類或擴展爲多個專用子類。
看看[this](http://stackoverflow.com/questions/24105260/php-upcasting-object)SO問題。 –
您可能需要使用中間變量('$ manager = $ this-> manager; $ manager-> mySubClassMethod()'),您可以按照您的建議通過內嵌的'@ var'鍵入內容。另一種方法(更好的方法,因爲它僅依賴於PHPDoc)是通過「@ property」重新聲明當前/父類中的$ manager屬性(必須位於該類的PHPDoc中)。所有這些都是因爲在PHPDoc(和PhpStorm的靜態分析)中,你只能鍵入提示只有第一級對象(例如'$ this','$ manager'等)並且不能執行n級('$ this-> manager'等) )。 – LazyOne
還有其他一些方法,例如:在這個/父類中引入'getManager()'方法,它將包含正確的'@ return'標記,並在代碼中使用它代替'$ this-> manager'。 – LazyOne