0

在其他类中,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 告诉我:

找不到要前往的声明

如何在这里正确使用“去申报”?

4

1 回答 1

1

在其他类中,PhpStorm 可以识别__construct()函数,但在 yaf 控制器中无法识别初始化方法init(),导致init()无法跟踪初始化操作。

PhpStorm 有特殊处理__constructor()——如果它在方法体内有任何赋值操作,它会跟踪将获得什么类型的类变量/属性。

例如,在这段代码中,它知道这$this->model将是TestModel类的实例——IDE 甚至在__construct()方法体之外也保留了这些信息。

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


您可以通过使用带有标签的简单 PHPDoc 注释轻松解决此问题@var,您将在其中为属性提供类型提示model

/** @var \TestModel Optional description here */
private $model;

养成为所有属性/类变量提供类型提示的习惯,即使 IDE 自动检测其类型 - 从长远来看,它有助于 IDE。

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

于 2017-04-11T09:27:29.527 回答