在其他类中,PhpStorm可以识别__construct()
函数,但在yaf控制器中它无法识别初始化方法init()
,导致init()
无法跟踪初始化操作。
class TestController extends Yaf_Controller_Abstract{
private $model;
public function init() {
$this->model = new TestModel();
}
public function test(){
$this->model->testDeclaration();
}
}
class TestModel{
public function testDeclaration(){
}
}
在此示例中,我希望在go to declaration
类中使用测试函数$this->model->testDeclaration();
中的“testDeclaration()
”到TestModel
函数。但它不起作用。
PhpStorm告诉我:
无法找到声明转到
如何在这里正确使用'去声明'?
答案 0 :(得分:1)
在其他类中,PhpStorm可以识别
__construct()
函数,但在yaf控制器中它无法识别初始化方法init()
,导致init()
无法跟踪初始化操作。
PhpStorm对__constructor()
有特殊处理 - 如果它在方法体内有任何赋值操作,它会跟踪什么类型的类变量/属性。
例如,在此代码中,它知道$this->model
将是TestModel
类的实例 - IDE甚至将此信息保存在__construct()
方法体之外。
对于其他方法,例如您的init()
,这些信息会被丢弃(因此它只在方法体的本地)。
您可以使用@var
标记的简单PHPDoc注释轻松解决此问题,您将为model
属性提供类型提示:
/** @var \TestModel Optional description here */
private $model;
养成为所有属性/类变量提供类型提示的习惯,即使IDE自动检测其类型 - 它可以帮助IDE长期运行。
https://phpdoc.org/docs/latest/references/phpdoc/tags/var.html