【发布时间】:2016-11-27 01:14:03
【问题描述】:
我有以下类结构
我正在使用 Symfony2 的服务来管理 BaseHandler 和 BaseManager 类
class BaseHandler implements IHandler
{
/**
* @var IManager
*/
protected $manager;
...
public function setManager(IManager $manager)
{
$this->manager = $manager;
}
...
}
一切正常,但问题是当我尝试使用 SpecializedManager 类的一些方法时,PhpStorm 的建议没有显示它们的方法,只显示属于 IManager 的方法。
例如在我的控制器中
public function indexAction(){
$handler = $this->get('appbundle.handler.specialized_handler');
$items = $this->manager->mySubClassMethod(); // PHPStorm shows warning
...
}
我不知道如何在处理程序子类中设置 var manager 的注释以更改为类似 @var SpecializedHandler $manager 的内容,建议中也没有出现其他替代方法。
注意:基类或扩展为多个专门的子类。
【问题讨论】:
-
看看this SO question。
-
您可能需要使用中间变量 (
$manager = $this->manager; $manager->mySubClassMethod()),您可以按照您的建议通过内联@var输入提示。另一种方法(更好的方法,因为它仅依赖于 PHPDoc)是通过@property在当前/父类中重新声明$manager属性(必须位于该类的 PHPDoc 中)。所有这一切都是因为使用 PHPDoc(和 PhpStorm 的静态分析),您只能键入提示 1 级对象(e.g.$this,$manager` 等)并且不能执行 n 级($this->manager等)。跨度> -
还有其他方法,例如:在此/父类中引入
getManager()方法,该方法将包含正确的@return标签并在您的代码中使用它而不是$this->manager。
标签: php symfony phpstorm phpdoc