如何对$ this变量使用docblock提示和类?

时间:2012-01-26 00:05:59

标签: php netbeans code-hinting docblocks

我正在使用NetBeans作为我的IDE。每当我有一些代码使用另一个函数(通常是工厂)来返回一个对象时,我通常可以执行以下操作来帮助提示:

/* @var $object FooClass */
$object = $someFunction->get('BarContext.FooClass');
$object-> // now will produce property and function hints for FooClass.

然而,当我使用一个对象的属性存储该类时,我有点不知道如何做同样的事情,因为trying to use @var $this->foo or @var foo不会进行暗示:

use Path\To\FooClass;

class Bar
{
    protected $foo;

    public function bat()
    {
        $this->foo = FactoryClass::get('Foo'); // Returns an instance of FooClass

        $this->foo //does not have hinting in IDE
    }
}

我已尝试过该课程的docblock,或使用上面protected $foo的内联注释或将foo设置为实例。

到目前为止,我找到的唯一解决方法是:

public function bat()
{
    $this->foo = FactoryClass::get('Foo');

    /* @var $extraVariable FooClass */
    $extraVariable = $this->foo;

    $extraVariable-> // now has hinting.
}

我真的希望暗示是在全班级,因为许多其他函数可能会使用$this->foo,并且知道类的方法和属性会很有用。

当然有一种更直接的方式......

2 个答案:

答案 0 :(得分:5)

我不能说它在Netbeans中是如何工作的,但在PHPEclipse中,你会将提示添加到变量本身的声明中:

use Path\To\FooClass;

class Bar
{
    /**
     * @var FooClass
     */
    protected $foo;

    public function bat()
    {
        $this->foo = FactoryClass::get('Foo'); // Returns an instance of FooClass

        $this->foo // should now have hinting
    }
}

答案 1 :(得分:1)

鉴于

class Bar
{
    protected $foo;

    public function bat()
    {
        $this->foo = FactoryClass::get('Foo'); // Returns an instance of FooClass

        $this->foo //does not have hinting in IDE
    }
}

IDE正在尝试从FactoryClass::get获取声明,该声明可能没有docblock返回类型。问题是如果这个工厂方法可以返回任意数量的类,除了使用你的解决方法之外你没有什么可做的。

否则,它不会知道FactoryClass::get('Foo')FactoryClass::get('Bar')之间的区别,因为这两个调用很可能会返回不同类型的对象。