1

IDE として NetBeans を使用しています。別の関数 (通常はファクトリ) を使用してオブジェクトを返すコードがある場合は、通常、次のようにしてヒントを得ることができます。

/* @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ただし、他の多くの関数が を使用する可能性があり、クラスのメソッドとプロパティを知っていると役立つため、ヒントをクラス全体に適用したいと思います。

確かにもっと簡単な方法があります...

4

2 に答える 2

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
    }
}
于 2012-01-26T00:11:25.577 に答える
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 の戻り値の型を持たない宣言を取得しようとしています。問題は、このファクトリ メソッドが任意の数のクラスを返すことができる場合、回避策を使用する以外にできることはあまりないということです。

そうしないと、これら 2 つの呼び出しが異なるタイプのオブジェクトを返す可能性が最も高いため、 FactoryClass::get('Foo')orの違いがわかりません。FactoryClass::get('Bar')

于 2012-01-26T00:17:36.287 に答える