PhpStorm 不支持 yaf 的 init 方法

PhpStorm does not support yaf's init method

在其他class中,PhpStorm可以识别__construct()函数,但是在yaf controller中无法识别初始化方法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();TestModelclass中的testDeclaration()函数。但是没用。

PhpStorm 告诉我:

Cannot find declaration to go to

如何在此处正确使用 'go to declaration'?

In other class, PhpStorm can identify __construct() function, but in yaf controller it can not identify the initialization method init(), resulting in the init() can not trace initialization operation.

PhpStorm 对 __constructor() 有特殊处理——它跟踪 class variable/property 如果在方法主体中有任何赋值操作将获得什么类型。

例如,在此代码中,它知道 $this->model 将是 TestModel class 的实例——IDE 甚至在 [=11 之外保留此信息=] 方法体.

对于其他方法,例如您的 init(),此类信息会在外部丢弃(因此它仅在方法主体中是本地的)。


您可以通过使用带有 @var 标记的简单 PHPDoc 注释轻松解决此问题,您将为 model 属性:

提供类型提示
/** @var \TestModel Optional description here */
private $model;

养成为所有 properties/class 变量提供类型提示的习惯,即使 IDE 自动检测其类型——它有助于 IDE in long 运行。

https://phpdoc.org/docs/latest/references/phpdoc/tags/var.html